Day 9 :异常处理方法

1249-刘同学

发表文章数:59

首页 » Python » 正文

2020/09/02

异常问题

程序在运行过程中,很有可能遇见不知道的问题,这样的问题就是异常,英文时Exceptio。python 提供了异常机制来处理异常。

try:
    copyFile ("d:/a.txt")
except:
    print("文件无法拷贝")

异常类

python 中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中
包含了该类异常的信息和对异常进行处理的方法。
处理异常的方式

  1. 解释器会把异常包装成一个类,就是 抛出异常,并停止当前执行路径,并把异常对象提交给解释器
  2. 解释器得到该异常后,寻找相应的代码来处理该异常
Traceback (most recent call last):#追根溯源,最后一次调用
File "C:/Users/Administrator/PycharmProjects/mypro_exception/my01.py", line 1, in <module>
a = 3/0
ZeroDivisionError: division by zero

Process finished with exit code 1  #1代表有异常,0代表无异常

解决异常问题的态度

  1. 不要害怕,慢慢梳理错误
  2. 先不要问老师,自己百度,查找解决方法。
  3. 最后找老师协助解决

解决异常问题的关键:定位

只需按照从上到下的顺序即可追溯(Trackback)错误发生的过程,最终定位引起错误的那一
行代码。

try… 一个except 结构

是最常见的异常处理结构

try:             
        被监控的可能引发异常的语句块  
except  BaseException [as e]:               #根据不同异常类型,写不同的类
        异常处理语句块

执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码;执行的时候,
如果 try块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处理异常;
异常处理完后,继续执行后续代码

try:
    print("step1")
    a = 3/0
    print("step2")                   #如果有异常,直接调到except 阶段。 如果没有异常直接跳到结束时
except BaseException as e:
    print("step3")
    print(e)
    
print("step4")

try…多个expect结构

一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代码。为了避免遗漏可能出现的异常,可以在最后增加 BaseException。

try:
        被监控的、可能引发异常的语句块
except Exception1:
        处理 Exception1 的语句块
except Exception2:
        处理 Exception2 的语句块
...
...
except BaseException:
处理可能遗漏的异常的语句块
try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a)/float(b)
    print(c)
    
except ZeroDivisionError:
    print("异常:除数不能为 0")
except TypeError:
    print("异常:除数和被除数都应该为数值类型")
except NameError:
    print("异常:变量不存在")
except BaseException as e:
    print(e)
    print(type(e))

try…except…else结构

如果 try 块中没有抛出异常,则执行 else 块。如果try 块中抛出异常,则执行 except 块,不执行 else 块。

try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a)/float(b)
except BaseException as e:
    print(e)
else:
    print("除的结果是:",c)

try…except.finally 结构

finally 块无论是否发生异常都会被执行;通常用来释放 try 块中申请的资源

try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c = float(a)/float(b)
except BaseException as e:
    print(e)
else:
    print(c)
finally:
    print("我是 finally 中的语句,无论发生异常与否,都执行!")
    
print("程序结束!")

Day 9 :异常处理方法

Return语句和异常处理

由于 return 有两种作用:结束方法运行、返回值。我们一般不把 return 放到异常处理结构
中,而是放到方法最后

def test01():
    print("step1")
    try:
        x = 3/0
        # return "a"
    except:
        print("step2")
        print("异常:0 不能做除数")
        #return "b"
    finally:
        print("step4")
        #return "d"
    print("step5")
        return "e" #一般不要将 return 语句放到 try、except、else、finally 块中,会发生一些意想不到的错误。建议放到方法最后。
        
print(test01())

常见异常的解决

python中的异常都是属于BaseException类
Day 9 :异常处理方法
Day 9 :异常处理方法

with上下文管理器

我们可以通过 with 上下文管理,更方便的实现释放资源的操作,特别是在文件操作,网络通信相关场合经常使用。

with open("d:/bb.txt") as f:
    for line in f:
    print(line)

拜师教育学员文章:作者:1249-刘同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Day 9 :异常处理方法》 发布于2020-09-02

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录