异常简介 | Python从入门到精通:高阶篇之四十
异常传播
def fn():
print('Hello fn')
fn()
执行结果:
此时可以正常执行输出。
在全局中添加代码,造成异常:
print(10/0)
执行结果:
我们在函数中添加异常代码:
def fn():
print('Hello fn')
print(10/0)
fn()
执行结果:
当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播;如果函数中没有对异常进行处理,则异常会继续向函数调用处传播;如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播;直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息。
我们修改上述代码:
def fn():
print('Hello fn')
print(10/0)
try:
fn()
except:
pass
执行结果:
此时异常就被处理掉了,程序可以正常执行。
我们再来看一个:
def fn():
print('Hello fn')
print(10/0)
def fn2():
print('Hello fn2')
fn()
fn2()
def fn3():
print('Hello fn3')
fn2()
fn3()
执行结果:
我们可以看出异常未经过处理,传播的过程。即抛出异常。
当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中,而异常传播时,实际上就是异常对象抛给了调用处。
比如 : ZeroDivisionError类的对象专门用来表示除0的异常;
NameError类的对象专门用来处理变量错误的异常;
....
在Python为我们提供了多个异常对象 。
我们通过官方文档去查找。
里面提供了很多的异常信息。
我们是通过对象抛出异常的,那么如何知道异常的信息呢?我们下一节来看。
配套视频课程,点击这里查看
获取更多资源请订阅Python学习站