1. 异常简介
1.1 常见异常
- 在程序运行过程中,不可避免出现一些错误。比如:
错误 | 含义 |
---|---|
ZeroDivisionError | 除数为零 |
IOError | 输入/输出操作失败 |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
NameError | 未声明/初始化对象 (没有属性) |
Exception | 常规异常的基类 |
- 异常后面的代码都不会执行
1.2 处理异常
- 程序运行时出现异常,我们不希望程序终止。这时我们可以编写代码来对异常进行处理
语法:
try:
代码块(可能出现错误的语句)
except:
代码块(出现错误后的处理方式)
else:
代码块(没有错误要执行的语句)
try:
def fn():
print('1')
print(10/0)
def fn2():
print('2')
fn()
def fn3():
print('3')
fn2()
fn3()
except Exception as e:
print('出现异常:',e,type(e))
finally:
print('无论程序是否出现异常,都会执行此语句')
运行结果:
3
2
1
出现异常: division by zero <class 'ZeroDivisionError'>
无论程序是否出现异常,都会执行此语句
2. 异常传播
def fn():
print('1')
print(10/0)
def fn2():
print('2')
fn()
def fn3():
print('3')
fn2()
fn3()
- 当在函数中出现异常时:
- 如果在函数中处理了异常, 则异常不会继续传播
- 如果函数中没有处理,则会向函数调用处传播 - 如果在函数外部:
- 如果在函数调用时处理异常,则异常不会继续传播
- 如果在函数调用时没有处理异常,继续向下一个调用处传播。
- 直到传递到全局作用域(主模块),如果依然没有处理,则终止程序提示异常信息。 - 程序运行过程中,出现异常以后,所有的异常信息会被保存到一个专门的异常对象中
- 而异常的传播时就是异常对象抛给了调用处
运行结果:
3
2
1
Traceback (most recent call last):
File "E:/python程序/python_learn/program/文件异常.py", line 13, in <module>
fn3()
File "E:/python程序/python_learn/program/文件异常.py", line 11, in fn3
fn2()
File "E:/python程序/python_learn/program/文件异常.py", line 7, in fn2
fn()
File "E:/python程序/python_learn/program/文件异常.py", line 3, in fn
print(10/0)
ZeroDivisionError: division by zero
(注意:部分资料来源于网络,如有侵权请联系作者!)