异常捕获
1.什么是异常?
异常即非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程序。
2.什么是异常捕获?
让程序执行过程中出现异常的时候不崩溃可以继续运行.
3.通用异常类型表
异常 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
Exception类:是通用异常基类下列异常类均继承于Exception类,Python解析器会自动将通用异常类型名称放在内建命名空间中,所以当使用通用异常类型时,不需要import exceptions模块。
4.异常捕获的语法
语法一:获取所有异常 try:...except:...
try:
代码段(业务逻辑代码)
except:
代码段2(自定义异常处理)
说明:
try、except - 关键字,固定写法
: - 固定写法
代码段1 - 和try保持一个缩进的一条或者多条语句; 可能会出现异常的代码(需 要捕获异常的代码)
代码段2 - 出现的异常被捕获到了,需要执行的代码
执行过程:
先执行代码段1,如果执行执行过程中出现异常直接执行代码段2;如果代码段1中没有异常代码段2不会执行
语法二:针对指定类型的异常进行捕获 try:...except 异常类型:...else...
try:
代码段1
except 异常类型:
代码段2
else:
代码段3
执行过程:如果except未捕获到异常,则会执行else中的代码
语法三:同时捕获多种异常,针对不同的异常做相同的处理
try:
代码段1
except (异常类型1,异常类型2,...)
代码段2
语法四:同时捕获多种异常,针对不同的异常做不同的处理
try:
代码段1
except 异常类型1:
代码段11
except 异常类型2:
代码段22
5.finally关键字
在所有异常捕获的语法结构的后面都可以添加finally关键字
try:
代码段1 (业务逻辑代码)
except:
代码段2 (自定义异常处理)
else:
代码段3 (没有异常执行的代码)
finally:
代码段4 (不管业务逻辑代码是否异常都会执行的代码)
try:
num_str = "10.0"
num = int(num_str)
print(num)
except ValueError as e:
print(e)
else:
print("代码质量很高,没有异常!")
finally:
print("最终执行的代码")
'''
运行结果:invalid literal for int() with base 10: '10.0'
最终执行的代码