1、需求
当程序遇到问题时,不让程序结束,而越过错误继续向下执行
格式:
try:
语句t
except 错误码:
语句1
except 错误码:
语句2
except 错误码:
语句3
......
except 错误码:
语句n
else:
语句e
注意:else可有可无
作用:用来检查try语句块中的错误,从而让except语句捕获错误信息并处理
逻辑:如果当try"语句t",执行出现错误,会匹配第一个错误码,如果匹配上就执行对应的“语句”
try:
print(3/1)
except NameError:
print("没有该变量")
except ZeroDivisionError :
print("除数为0了")
else:
print("代码没有问题")
print("&&&&&&&&&&&&&&&&&&&&&&&&&")
3.0
代码没有问题
&&&&&&&&&&&&&&&&&&&&&&&&&
try:
print(3/1)
except NameError:
print("没有该变量")
except ZeroDivisionError :
print("除数为0了")
else:
print("代码没有问题")
print("&&&&&&&&&&&&&&&&&&&&&&&&&")
除数为0了
&&&&&&&&&&&&&&&&&&&&&&&&&
2、使用except 而不使用任何的错误类型
try:
print(4/1)
print(num)
except:
print("程序出现了异常")
程序出现了异常
3、使用except带着多种异常
try:
pass
except(NameError,ZeroDivisionError):
print("出现了NameError或者ZeroDivisionError")
4、特殊情况
4.1
try:
print(5/0)
except BaseException:
print("异常1")
except ZeroDivisionError:
print("异常2")
异常1
错误其实是class类,所有的错误都继承BaseException,所以在错误捕获时,它捕获了该类型的错误,还把子类型的错误一网打尽
4.2
跨越多层调用,main调用了func2,func2调用了func1,func1出现了错误,这时只要main捕获了就可以处理
5、带有finally的异常处理
格式:
try:
语句t
except 错误码:
语句1
except 错误码:
语句2
except 错误码:
语句3
......
except 错误码:
语句n
finally:
语句f
作用:无论t语句是否有错误,都将执行最后的语句f
try:
print(3/0)
except ZeroDivisionError :
print("除数为0了")
finally:
print("必须执行")
print("&&&&&&&&&&&&&&&&&&&&&&&&&")
除数为0了
必须执行
&&&&&&&&&&&&&&&&&&&&&&&&&