异常
异常的简介
我们在运行程序的过程中,有时候程序会报错,比如说,除数不能为0,索引值不存在,不同数据类型相加错误等。我们称这些在程序运行时出现的错误为异常
异常处理
当程序中出现异常时,代码会终止运行,异常后面的代码都不会执行。所以我们希望能够通过编写代码来处理异常,使程序能够在遇到异常后能够正常继续执行,异常后面的代码也能够继续执行
处理异常的代码
try:
代码块(容易出错的代码快)
except(错误类型):
代码块(try代码块出错后执行)
except(错误类型):
代码块
.......
else:
代码块(try代码块无异常时执行)
finally:
代码块(无论try代码块是否正确都执行)
注意:try语句必须有,而except和finally至少要有其中一个,else语句可有可无
异常的传播
异常传播的案例
def fn():
print('我是fn')
print(10/0)
def fn2():
print('我是fn2')
fn()
def fn3():
print('我是fn3')
fn2()
# try:
# fn2()
# except ZeroDivisionError:
# print('除数不能为0')
r = fn3()
print(r)
通过上面的执行结果,可以看出异常传播是由里向外进行传播的:函数作用域 → 全局作用域。
详细的说:当函数内遇到异常时,如果进行了异常处理,则不会报错,如果没有进行处理,那么就会向函数调用处进行传播,如果一直没有进行处理,直到全局作用域,若还未处理,则报错。
当程序在执行中遇到异常时,会将异常信息传给异常对象,而异常的传播,实际上是将异常对象抛给了函数调用处