文章预览
回顾复习
Python程序运行过程中出现未知情况,导致程序出现错误无法继续执行下去,这个过程称为异常。
当程序出现异常,我们通过捕获异常方式,通过预先设定的逻辑代码让程序继续运行,这个过程称为异常处理。
异常处理是我们面对程序代码可能会出现的错误,进行预先设定相关的代码,从而让程序能够继续执行。
在Python中,要怎么进行异常处理呢?
目前常用的异常处理结构如下:
1. try..一个except结构
try..except是最常见的异常处理结构。
try:
被监控的可能引发异常的语句块
except BaseException [as e]:
异常处理语句块
try块包含着可能引发异常的代码,except块则用来捕捉和处理的异常
执行的时候,如果try块中没有引发异常,则跳过except块继续执行后续代码
执行的时候,如果try中发生了异常,则跳过try块中的后续代码,跳到相应的except块中处理异常
异常处理完后,继续执行后续代码
try:
print("Step1")
a = 3/0
print("Step2")
except BaseException as e:
print("Step3")
print(e)
print("Step4")
2. try...多个except结构
一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代码。为了避免漏出可能出现的异常,可以在最后增加BaseException.
try:
被监控的,可能引发异常的语句块
exception Exception1:
处理Exception1的语句块
exception Exception2:
处理Exception2的语句块
.....
exception BaseException:
处理可能遗漏的异常的语句块
try:
a = input("please input 被除数:")
b = input("Please input 除数:")
c = float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常:除数不能为0")
except TypeError:
print("异常:不能将字母串转化成数字")
except NameError:
print("异常:变量不存在")
except BaseException as e:
print(e)
3. else结构
try...except..else结构增加了else块。
-
如果try块中没有抛出异常,则执行else块。
-
如果try块中抛出异常,则执行except块,不执行else块
try:
a = input("please input 被除数:")
b = input("Please input 除数:")
c = float(a)/float(b)
except BaseException as e:
print(e)
else:
print("运算结果是:",c)
print("game over")
-
发送异常的执行情况(执行except块,没有执行else)
-
没有发送异常执行情况(执行完try块,执行else)
4. finally结构
try...except..finally结构中,finally块无论是否发生异常都会被执行。
通常用来释放try块中申请的资源,比如打开文件之后,关闭文件
finally执行逻辑图如下:
try:
a = input("please input 被除数:")
b = input("Please input 除数:")
c = float(a)/float(b)
except BaseException as e:
print(e)
else:
print("运算结果是:",c)
finally:
print("finally语句块,无论发生异常与否,都执行")
print("game over")
5. 自定义异常
当我们在实际工作中,有时候也需要自己定义异常类。
-
自定义异常类一般都是运行时异常,通常继承Exception或其子类即可。
-
命名一般以
Error
,
Exception
为后缀。
-
自定义异常由raise语句主动抛出
class AgeException(Exception):
def __init__(self,errInfo):
Exception.__init__(self)
self.errInfo = errInfo
def __str__(self):
return str(self.errInfo)+",年龄不在0~150岁!"
if __name__ == "__main__":
age = int(input("please input age:"))
if age < 0 or age > 150:
raise AgeException(age)
else:
print("right age",age)
总结
本期,我们详细学习了异常处理的5种方法,在工作使用场景上,我们根据自己的需求选择使用。
但是,异常处理本身就是提前警告代码风险情况,我们对于必现的异常进行根除处理,不要留在我们代码中,增加代码的出现问题的风险,提高代码的稳定性。
好啦,以上是本期内容,欢迎大家评论点赞关注,下次见~
………………………………