Python异常体系
异常结构图
常见异常
- BaseException 所有异常的基类
- Exception
- StandardException 所有的内建标准异常的基类
- ArithmeticError 所有数值计算错误的基类
- FloatingPointError 浮点计算错误
- OverflowError 数值运算超出最大限制
- ZeroDivisionError 除(或取模)零 (所有数据类型)
- EnviromentError 操作系统错误的基类
- IOError 输入/输出操作失败
- OSError 操作系统错误
- ImportError 导入模块/对象失败
- LookupError 无效数据查询的基类
- IndexError 序列中没有此索引(index)
- KeyError 映射中没有这个键
- MemoryError 内存溢出错误(对于Python 解释器不是致命的)
- NameError 未声明/初始化对象 (没有属性)
- UnboundLocalError 访问未初始化的本地变量
- ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
- RuntimeError 一般的运行时错误
- NotImplementedError 尚未实现的方法
- SyntaxError Python语法错误
- IndentationError 缩进错误
- TabError Tab 和空格混用
- IndentationError 缩进错误
- TypeError 对类型无效的操作
- ValueError 传入无效的参数
- UnicodeError Unicode相关的错误
- UnicodeDecodeError Unicode解码时的错误
- UnicodeEncodeError Unicode编码时错误
- UnicodeTranslateError Unicode转换时错误
- UnicodeError Unicode相关的错误
- ArithmeticError 所有数值计算错误的基类
- Warning 警告的基类
- StandardException 所有的内建标准异常的基类
- Exception
注意,BaseException是异常的顶级类。但是这个类不能当作是由用户定义的类直接继承的,而是要继承Exception。
异常捕获取
# -*- coding: UTF-8 -*-
# 当异常时,捕获并获取异常
def test1():
try:
open("1.tx")
except IOError:
print("发生了错误")
# 当异常时,捕获并获取异常对象
def test2():
try:
open("1.tx")
except IOError as errorMsg:
print("发生了错误", errorMsg)
# 当异常未发生时,执行else语句
def test3():
try:
open("2.txt")
except IOError as errorMsg:
print("发生了错误", errorMsg)
else:
print("没有发生异常")
# 无论是否发生异常,finally语句必执行
def test4():
try:
open("2.txt")
except IOError as errorMsg:
print("发生了错误", errorMsg)
finally:
print("finally语句执行")
# try...finally语句
def test5():
try:
open("2.txt")
finally:
print("finally语句执行")
# 触发异常raise
def test6():
raise Exception("触发异常")
test1()
test2()
test3()
test4()
test5()
try:
test6()
except Exception as errorMsg:
print(errorMsg)
自定义异常
# -*- coding: UTF-8 -*-
class MyException(Exception):
def __init__(self, arg):
self.arg = arg
def __str__(self):
return repr(self.arg)
def test_exception():
try:
raise MyException("自定义异常")
except MyException as errorMsg:
print(errorMsg.arg)
test_exception()