异常传播 | Python从入门到精通:高阶篇之四十一
异常对象
我们如何去捕获到异常呢?
我们来通过代码分析一下:
print('异常出现前')
print(10/0)
print('异常出现后')
执行结果:
我们之前是如何处理这些异常的呢?
print('异常出现前')
try:
print(10/0)
except:
print('处理异常的代码~~~')
print('异常出现后')
执行结果:
在捕获异常对象之前,我们还需要知道一点。
如果except
后不跟任何的内容,则此时它会捕获到所有的异常。
如果在except
后跟着一个异常的类型,那么此时它只会捕获该类型的异常。
print('异常出现前')
try:
# print(c)
print(10/0)
except NameError:
print(''出现 NameError 异常'')
print('异常出现后')
执行结果:
此时可以发现,注释掉print(c)
之后,程序会出错,只能解决NameError的异常。如果要想解决print(10/0)
的异常,可以再添加一个ZeroDivisionError
的异常:
except ZeroDivisionError:
print('出现 ZeroDivisionError 异常')
执行结果:
此时发现两个异常都解决了,但是如果现在添加了一个l = []
:
l = []
try:
l[10]
执行结果:
此时没有捕获异常,我们来添加一下:
except IndexError:
print('出现 IndexError 异常')
except:
print('未知异常')
执行结果:
我们再添加一个异常代码:
1 + 'hello'
执行结果:
except:
与except Exception:
效果一样,所以可以省略不写。
Exception 是所有异常类的父类,所以如果except后跟的是Exception,他也会捕获到所有的异常,可以在异常类后边跟着一个 as xx 此时xx就是异常对象。
except Exception as e :
print('未知异常',e)
执行结果:
我们来看一下e的类型:
print('未知异常',e,type(e))
执行结果:
在异常处理过程中,除了以上的语句之外,还可以添加finally
。我们在后面添加finally
语句。
print('异常出现前')
l = []
try:
print(10/2)
except NameError:
print('出现 NameError 异常')
except ZeroDivisionError:
print('出现 ZeroDivisionError 异常')
except IndexError:
print('出现 IndexError 异常')
except Exception as e :
print('未知异常',e,type(e))
finally :
print('无论是否出现异常,该子句都会执行')
print('异常出现后')
执行结果:
修改:
print(10/0)
执行结果:
此时处理异常的语句可改为:
try语句
try:
代码块(可能出现错误的语句)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
else:
代码块(没出错时要执行的语句)
finally:
代码块(该代码块总会执行)
try是必须的 else语句有没有都行
except和finally至少有一个
配套视频课程,点击这里查看
获取更多资源请订阅Python学习站