python异常处理机制
异常处理是python的一种高级工具,当异常发生时,程序会停止当前的所有工作,跳转到异常处理部分去执行。异常既可以是程序错误引发的,也可以由代码主动触发。
异常处理基本结构
try:
可能引发异常的代码
except 异常类型名称:
异常处理代码
else:
没有发生异常时执行的代码
异常报错:
try:
class test:
def getdata(self):
return self.data
y = test()
y.getdata()
except AttributeError:
print('出错了:访问对象属性出错')
else:
print('程序中没有发生错误')
print('程序执行完毕!')
结果:
出错了:访问对象属性出错!
程序执行完毕
测试else部分执行
try:
class test:
def getdata(self):
return self.data
y = test()
y.data=100
y.getdata()
except AttributeError:
print('出错了:访问对象属性出错')
else:
print('程序中没有发生错误')
print('程序执行完毕!')
结果:
程序中没有发生错误
程序执行完毕!
捕捉多个异常
在异常处理结构中,可以使用多个except语句,以捕捉可能出现的多种异常
x=[1,2]
try:
x[0]/0
except ZeroDivisionError:
print('除0错误')
except IndexError:
print('索引下标超出范围')
else:
print('没有错误')
结果:
除0错误
引发不同异常
x=[1,2]
try:
x[2]/2
except ZeroDivisionError:
print('除0错误')
except IndexError:
print('索引下标超出范围')
else:
print('没有错误')
结果
索引下标超出范围
except…as与统一处理
x=[1,2]
try:
x[0]/0
except (ZeroDivisionError,IndexError) as exp:
print('出错了:')
print('异常类型:',exp.__class__.__name__)
print('异常信息:',exp)
else:
print('没有错误')
结果
出错了:
异常类型:ZeroDivisionError
异常信息:division by zero
执行另一个异常
x=[1,2]
try:
x[2]/2
except (ZeroDivisionError,IndexError) as exp:
print('出错了:')
print('异常类型ÿ