异常
即使一条语句或表达式在语法上是正确的,当试图执行它时也可能会引发错误。运行期检测到的错误称为异常,并且程序不会无条件的崩溃,后面会讲如何在Python程序中处理它们。然而,大多数异常都不会被程序处理,触发异常的例子如下所示:
num = 0
print("num = ", num1)
print("num = " + num)
print("1 / 0 = ", 1 / num)
以上3条打印语句分别执行,会依次出现对应的错误提示。
(1)命名错误( NameError)
(2)类型错误( TypeError)
(3)零除错误( ZeroDivisionError)
错误信息的最后一行指出发生了什么错误。异常也有不同的类型,异常类型做为错误信息的一部分显示出来,示例中的异常分别为零除错误( ZeroDivisionError ),命名错误( NameError)和类型错误( TypeError )。打印错误信息时,异常的类型作为异常的内置名显示。对于所有的内置异常都是如此,不过用户自定义异常就不一定了。标准异常名是内置的标识(没有保留关键字)。这一行后一部分是关于该异常类型的详细说明,这意味着它的内容依赖于异常类型。错误信息的前半部分以堆栈的形式列出异常发生的位置。通常在堆栈中列出了源代码行,然而,来自标准输入的源码不会显示出来。
Python标准异常表:
BaseException—>所有异常的基类
SystemExit
解释器请求退出
KeyboardInterrupt
用户中断执行(输入)
GeneratorExit
生成器发生异常通知退出
Exception—>常规异常的基类
StopIteration
迭代器没有更多的值
StopAsyncIteration
必须通过异步迭步器__anext__()方法引发以停止迭代
ArithmeticError—>各种运算错误异常的基类
FloatingPointError
浮点计算错误
OverflowError
数值运算结果太大无法表示
ZeroDivisionError
除法或模运算的第二个自变量为零
AssertionError
assert(断言)语句失败时
AttributeError
属性引用或赋值失败
BufferError
无法执行与缓存区相关的操作
EOFError
当input()函数达到文件结束条件(EOF)而不读取任何数据时
ImportError—>导入模块或对象失败
ModuleNotFoundError
无法找到要导入的模块
LookupError—>映射或序列上使用的键或索引无效的基类
IndexError
序列下标超出范围
KeyError
在现有键集中找不到映射(字典)的键
MemoryError
操作内存不足
NameError—>未声明/初始化对象
UnboundLocalError
访问未初始化的本地变量
OSError—>操作系统错误
BlockingIOError
操作将阻塞对象设置为非阻塞操作
ChildProcessError
子进程上的操作失败
ConnectionError—>与连接相关的异常的基类
BrokenPipeError
另一端关闭时尝试写入管道或试图在已关闭写入的套接字上写入
ConnectionAbortedError
等方终止连接尝试
ConnectionRefusedError
等端拒绝连接尝试
ConnectionResetError
等方重置连接
FileExistsError
尝试创建已经存在的文件或目录
FileNotFoundError
请求文件或目录但不存在
InterruptedError
系统调用被传入信号中断
IsADirectoryError
在目录上请求文件操作 (例如os.remove())
NotADirectoryError
在非目录上请求目录操作(例如os.listdir())
PermissionError
尝试在没有足够访问权限(例如文件系统权限)的情况下运行操作
ProcessLookupError
给定的进程不存在
TimeoutError
系统功能在系统级别超时
ReferenceError
weakref.proxy()函数创建的弱引用试图访问已经垃圾回收了的对象
RuntimeError—>检测到不属于任何其他类别的错误时
NotImplementedError
在用户定义的基类中,抽象方法要求派生类重写该方法或者正在开发的类指示仍然需要添加实际实现
RecursionError
解释器检测到超出最大递归深度
SyntaxError—>语法错误的基类
IndentationError—>缩进错误
TabError
Tab和空格混用出现错误
SystemError
解释器发现内部错误时
TypeError
将操作或功能应用于不合适类型的对象
ValueError—>操作或函数接收到类型正确但值不合适的参数
UnicodeError—>发生与Unicode相关的编码或解码错误
UnicodeDecodeError
Unicode解码错误
UnicodeEncodeError
Unicode编码错误
UnicodeTranslateError
Unicode转码错误
Warning—>警告类别的基类
DeprecationWarning
有关已弃用功能的警告的基类
PendingDeprecationWarning
有关不推荐使用功能的警告的基类
RuntimeWarning
有关可疑运行时行为的基类
SyntaxWarning
有关可疑语法的基类
UserWarning
用户代码生成的警告的基类
FutureWarning
有关已弃用功能的警告的基类
ImportWarning
用于警告有关模块导入中可能错误的警告的基类
UnicodeWarning
与Unicode相关的警告的基类
BytesWarning
与bytes和bytearray有关的警告的基类
ResourceWarning
与资源使用相关的警告的基类