异常的概念
在生活中,使用计算机中的某个应用软件时,由于某种错误,可能会引发异常,如下图所示。
在程序中,当Python检测到一个错误时,解释器就会指出当前流程已无法继续执行下去,这时就出现了异常,例如,使用print()函数输出一个未定义的变量值,具体如下所示:
print(name)
在Python程序中,如果出现异常,而异常对象并未被捕捉或处理,程序就会用自动的回溯,返回一种错误信息,并终止执行,上述语句返回的错误信息如下:
Traceback (most recent call last):
File "E:/study/随笔/Python基础1/2.py", line 1, in <module>
print(name)
NameError: name 'name' is not defined
上述信息提示name变量名未定义,NameError为Python的内建异常类。异常是指因为程序出错而在正常控制流以外采取的行为,即异常是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
异常类
Python为了区分不同的异常,其中内置了许多异常类,常见的异常类如下表所示。
异常类名称
|
基类
|
说明
|
BaseException
|
object
|
所有异常类的直接或间接基类
|
Exception
|
BaseException
|
所有非退出异常的基类
|
SystemExit
|
BaseException
|
程序请求退出时抛出的异常
|
KeyboardInterrupt
|
BaseException
|
用户中断执行(通常是输入Ctrl+C)时抛出
|
GeneratorExit
|
BaseException
|
生成器发生异常,通知退出
|
ArithmeticError
|
Exception
|
所有数值计算错误的基类
|
FloatingPointError
|
ArithmeticError
|
浮点运算错误
|
OverflowError
|
ArithmeticError
|
数值运算超出最大限制
|
ZeroDivisionError
|
ArithmeticError
|
除零导致的异常
|
AssertionError
|
Exception
|
断言语句失败
|
AttributeError
|
Exception
|
对象没有这个属性
|
EOFError
|
Exception
|
读取超过文件结尾
|
OSError
|
Exception
|
I/O相关错误的基类
|
ImportError
|
Exception
|
导入模块/对象失败
|
LookupError
|
Exception
|
查找错误的基类
|
IndexError
|
LookupError
|
序列中没有此索引
|
KeyError
|
LookupError
|
映射中没有这个键
|
MemoryError
|
Exception
|
内存溢出错误
|
NameError
|
Exception
|
未声明、未初始化对象
|
UnboundLocalError
|
NameError
|
访问未初始化的本地变量
|
ReferenceError
|
Exception
|
弱引用试图访问已经垃圾回收了的对象
|
RuntimeError
|
Exception
|
一般的运行时错误
|
NotImplementedError
|
RuntimeError
|
尚未实现的方法
|
SyntaxError
|
Exception
|
语法错误
|
IndentationError
|
SyntaxError
|
缩进错误
|
TabError
|
IndentationError
|
Tab 和空格混用
|
SystemError
|
Exception
|
一般的解释器系统错误
|
TypeError
|
Exception
|
对类型无效的操作
|
ValueError
|
Exception
|
传入无效的参数
|
Warning
|
Exception
|
警告的基类
|
RuntimeWarning
|
Warning
|
可疑的运行时行为警告基类
|
SyntaxWarning
|
Warning
|
可疑的语法警告基类
|
在上表中,BaseException是异常的顶级类,但用户定义的类不能直接继承这个类,而是要继承Exception。Exception类是与应用相关异常的顶层基类,除了系统退出事件类之外(SystemExit、KeyboardInterrupt和GeneratorExit),几乎所有用户定义的类都应该继承自这个类,而不是BaseException类。