1.内建异常类的继承关系
2.常见异常汇总
异常名称 | 说明 |
---|---|
ArithmeticError
|
所有数值计算错误的基类
|
AssertionError
|
断言语句失败
|
AttributeError
|
对象没有这个属性
|
BaseException
|
所有异常的基类
|
DeprecationWarning
|
关于被弃用的特征的警告
|
EnvironmentError
|
操作系统错误的基类
|
EOFError
|
没有内建输入,到达 EOF 标记
|
Exception
|
常规错误的基类
|
FloatingPointError
|
浮点计算错误
|
FutureWarning
|
关于构造将来语义会有改变的警告
|
GeneratorExit
|
生成器(generator)发生异常来通知退出
|
ImportError
|
导入模块/对象失败
|
IndentationError
|
缩进错误
|
IndexError
|
序列中没有此索引(index)
|
IOError
|
输入/输出操作失败
|
KeyboardInterrupt
|
用户中断执行(通常是输入^C)
|
KeyError
|
映射中没有这个键
|
LookupError
|
无效数据查询的基类
|
MemoryError
|
内存溢出错误(对于 Python 解释器不是致命的)
|
NameError
|
未声明/初始化对象 (没有属性)
|
NotImplementedError
|
尚未实现的方法
|
OSError
|
操作系统错误
|
OverflowError
|
数值运算超出最大限制
|
OverflowWarning
|
旧的关于自动提升为长整型(long)的警告
|
PendingDeprecationWarning
|
关于特性将会被废弃的警告
|
ReferenceError
|
弱引用(Weak reference)试图访问已经垃圾回收了的对象
|
RuntimeError
|
一般的运行时错误
|
RuntimeWarning
|
可疑的运行时行为(runtime behavior)的警告
|
StandardError
|
所有的内建标准异常的基类
|
StopIteration
|
迭代器没有更多的值
|
SyntaxError
|
Python 语法错误
|
SyntaxWarning
|
可疑的语法的警告
|
SystemError
|
一般的解释器系统错误
|
SystemExit
|
解释器请求退出
|
TabError
|
Tab 和空格混用
|
TypeError
|
对类型无效的操作
|
UnboundLocalError
|
访问未初始化的本地变量
|
UnicodeDecodeError
|
Unicode 解码时的错误
|
UnicodeEncodeError
|
Unicode 编码时错误
|
UnicodeError
|
Unicode 相关的错误
|
UnicodeTranslateError
|
Unicode 转换时错误
|
UserWarning
|
用户代码生成的警告
|
ValueError
|
传入无效的参数
|
Warning
|
警告的基类
|
ZeroDivisionError
|
除(或取模)零 (所有数据类型)
|
3.定义自己的异常类:
有时候我们也需要自己定义异常类。自定义异常类一般都是运行时异常,通常 继承
Exception
或其子类即可。命名一般以
Error
、
Exception
为后缀。
class AgeError(Exception): # 继承 Exception
def __init__(self, errorInfo):
Exception.__init__(self)
self.errorInfo = errorInfo
def __str__(self):
return str(self.errorInfo) + ",年龄错误!应该在 1-110 之间"
if __name__ == "__main__": # 如果为 True,则模块是作为独立文件运行,可以执行测试代码
age = int(input("输入一个年龄:"))
if age < 1 or age > 110:
raise AgeError(age)
else:
print("正常的年龄:", age)
执行输出:
输入一个年龄:222
Traceback (most recent call last):
File "E:\Project\OscarTest\test\testcase\atesa.py", line 14, in <module>
raise AgeError(age)
__main__.AgeError: 222,年龄错误!应该在 1-150 之间
4.使用 Traceback 模块打印异常信息
import traceback
try:
print("step1")
num = 1 / 0
except:
traceback.print_exc()
5.其他:
- try...except...else 结构增加了“else 块”。如果 try 块中没有抛出异常,则执行 else 块。如果 try 块中抛出异常,则执行 except 块,不执行 else 块。
- 由于 return 有两种作用:结束方法运行、返回值。
一般不要将 return 语句放到 try、except、else、finally 块中,会发生一些意想不到的错误。建议放到方法最后。