On this page
6. Built-in Exceptions
异常应该是类对象。exception 在模块exceptions中定义。无需显式导入该模块:内置名称空间和exceptions模块中都提供了异常。
对于类异常,在带有except子句的try语句中提到特定类,该子句还处理从该类派生的任何异常类(但不处理从中衍生* it *的异常类)。pass子类不相关的两个异常类即使名称相同,也永远不会等效。
下面列出的内置异常可以由解释器或内置函数生成。除非另有说明,否则它们具有“关联值”,指示错误的详细原因。这可以是包含多个信息项的字符串或 Tuples(例如,错误代码和解释该代码的字符串)。关联的值是raise语句的第二个参数。如果异常类是从标准根类BaseException派生的,则关联值显示为异常实例的args
属性。
用户代码可以引发内置异常。这可以用来测试异常处理程序或报告错误条件,就像解释器引发相同异常的情况一样。但请注意,没有什么可以防止用户代码引发不适当的错误。
内置的异常类可以被子类化以定义新的异常。鼓励程序员从Exception类或其子类之一而不是BaseException派生新的异常。有关定义异常的更多信息,请参见 Python 教程中的User-defined Exceptions。
以下异常仅用作其他异常的 Base Class。
- exception
BaseException
2.5 版的新Function。
args
- 给异常构造函数的参数的 Tuples。一些内置的异常(例如IOError)期望有一定数量的参数,并为此 Tuples 的元素分配特殊的含义,而其他一些异常通常仅使用给出错误消息的单个字符串来调用。
exception
Exception
- 所有内置的,非系统退出的异常都从此类派生。所有用户定义的异常也应从此类派生。
在版本 2.5 中更改:更改为从BaseException继承。
exception
StandardError
- 除StopIteration,GeneratorExit,KeyboardInterrupt和SystemExit之外的所有内置异常的 Base Class。 StandardError本身是从Exception派生的。
exception
ArithmeticError
- 各种算术错误引发的那些内置异常的 Base Class:OverflowError,ZeroDivisionError,FloatingPointError。
exception
BufferError
- 在无法执行buffer相关操作时引发。
exception
LookupError
- 当在 Map 或序列上使用的键或索引无效时引发的异常的 Base Class:IndexError,KeyError。可以passcodecs.lookup()直接提出。
exception
EnvironmentError
版本 1.5.2 中的新Function。
当用 3Tuples 实例化EnvironmentError异常时,前两个项如上所述可用,而第三项在filename
属性上可用。但是,为了向后兼容,args
属性仅包含前两个构造函数参数的 2Tuples。
如果使用 3 个参数以外的参数创建此异常,则filename
属性为None
。当使用 2 或 3 个参数以外的实例创建实例时,errno和strerror
属性也为None
。在最后一种情况下,args
包含逐字构造函数参数作为 Tuples。
以下异常是实际引发的异常。
- exception
AssertionError
- assert语句失败时引发。
exception
AttributeError
- 在属性引用(请参见Attribute references)或分配失败时引发。 (当一个对象根本不支持属性引用或属性分配时,将引发TypeError。)
exception
EOFError
- 当内置函数之一(input()或raw_input())达到文件结束条件(EOF)而未读取任何数据时引发。 (注:file.read()和file.readline()方法在到达 EOF 时返回空字符串。)
exception
FloatingPointError
- 当浮点运算失败时引发。总是定义此异常,但是只有在使用
--with-fpectl
选项配置 Python 或在pyconfig.h
文件中定义了WANT_SIGFPE_HANDLER
符号时,才可以引发此异常。
- 当浮点运算失败时引发。总是定义此异常,但是只有在使用
exception
GeneratorExit
- 在调用generator的
close()
方法时引发。它从BaseException而不是StandardError直接继承,因为从技术上讲这不是错误。
- 在调用generator的
2.5 版的新Function。
在 2.6 版中进行了更改:已更改为从BaseException继承。
此类是从EnvironmentError派生的。有关异常实例属性的更多信息,请参见上面的讨论。
在 2.6 版中进行了更改:更改了socket.error以将其用作 Base Class。
exception
ImportError
- 当import语句未能找到模块定义或
from ... import
未能找到要导入的名称时引发。
- 当import语句未能找到模块定义或
exception
IndexError
- 当序列下标超出范围时引发。 (切片索引会被无提示地截断以使其落在允许的范围内;如果索引不是纯整数,则会引发TypeError。)
exception
KeyError
- 当在现有键集中找不到 Map(字典)键时引发。
exception
KeyboardInterrupt
- 当用户按下break键(通常为 Control-C 或 Delete)时触发。在执行期间,会定期检查break。内置函数input()或raw_input()awaitImporting 时键入的break也会引发此异常。异常继承自BaseException,以免被捕获Exception的代码意外捕获,从而防止解释器退出。
在版本 2.5 中更改:更改为从BaseException继承。
exception
MemoryError
- 在操作内存不足时引发,但这种情况仍然可以挽救(pass删除某些对象)。关联值是一个字符串,指示哪种(内部)操作用完了内存。注意,由于底层的内存 Management 体系结构(C 的
malloc()
函数),解释器可能无法始终完全从这种情况恢复;尽管如此,它还是引发了一个 exception,以便在导致程序失控的情况下可以打印堆栈回溯。
- 在操作内存不足时引发,但这种情况仍然可以挽救(pass删除某些对象)。关联值是一个字符串,指示哪种(内部)操作用完了内存。注意,由于底层的内存 Management 体系结构(C 的
exception
NameError
- 在找不到本地或全局名称时引发。这仅适用于不合格的名称。关联的值是一条错误消息,其中包含找不到的名称。
exception
NotImplementedError
- 此异常源自RuntimeError。在用户定义的 Base Class 中,抽象方法要求派生类重写该方法时,应引发此异常。
版本 1.5.2 中的新Function。
- exception
OSError
- 此异常源自EnvironmentError。当函数返回与系统相关的错误(不适用于非法参数类型或其他偶然错误)时,将引发此错误。 errno属性是
errno
的数字错误代码,strerror
属性是相应的字符串,如 C 函数perror()
所打印。请参阅模块errno,其中包含基础 os 定义的错误代码的名称。
- 此异常源自EnvironmentError。当函数返回与系统相关的错误(不适用于非法参数类型或其他偶然错误)时,将引发此错误。 errno属性是
对于涉及文件系统路径的异常(例如chdir()
或unlink()
),异常实例将包含第三个属性filename
,这是传递给函数的文件名。
版本 1.5.2 中的新Function。
exception
OverflowError
- 在算术运算的结果太大而无法表示时引发。对于长整数(宁愿加MemoryError而不是放弃)和大多数使用纯整数的操作(返回一个长整数),都不会发生这种情况。由于 C 语言中缺乏浮点异常处理的标准化,因此大多数浮点运算也不会被检查。
exception
ReferenceError
- 当由weakref.proxy()函数创建的弱引用代理服务器被垃圾回收后,用于访问引用对象的属性时,会引发此异常。有关弱引用的更多信息,请参见weakref模块。
2.2 版的新Function:以前称为weakref.ReferenceError异常。
exception
RuntimeError
- 在检测到不属于任何其他类别的错误时引发。关联的值是一个字符串,指示确切地出错了。
exception
StopIteration
- 由iterator的next()方法引发,以表示没有其他值。这是从Exception而不是StandardError派生的,因为在正常应用中这不被视为错误。
2.2 版中的新Function。
- exception
SyntaxError
此类的实例具有属性filename
,lineno
,offset
和text
,以便更轻松地访问详细信息。异常实例的str()仅返回消息。
exception
IndentationError
- 与缩进不正确相关的语法错误的 Base Class。这是SyntaxError的子类。
exception
TabError
- 当缩进包含制表符和空格的不一致使用时引发。这是IndentationError的子类。
exception
SystemError
- 在解释器发现内部错误时引发,但情况看起来并不那么严重,以致它放弃了所有希望。关联的值是一个字符串,用于指示出了什么问题(以低级术语表示)。
您应该将此报告给 Python 解释器的作者或维护者。确保报告 Python 解释器的版本(sys.version
;它还会在交互式 Python 会话的开始时打印),确切的错误消息(异常的关联值)以及(如果可能)触发错误的程序源。
- exception
SystemExit
- sys.exit()函数引发了此异常。不处理时,Python 解释器退出;否则,退出。不打印堆栈回溯。如果关联值是纯整数,则它指定系统退出状态(传递给 C 的
exit()
函数);否则,它指定系统退出状态。如果为None
,则退出状态为零;如果它具有另一种类型(例如字符串),则将打印对象的值,并且退出状态为 1.
- sys.exit()函数引发了此异常。不处理时,Python 解释器退出;否则,退出。不打印堆栈回溯。如果关联值是纯整数,则它指定系统退出状态(传递给 C 的
实例具有属性code
,该属性设置为建议的退出状态或错误消息(默认为None
)。同样,此异常直接从BaseException而不是StandardError派生,因为从技术上讲它不是错误。
对sys.exit()的调用将转换为异常,以便可以执行清理处理程序(try语句的finally子句),从而使调试器可以执行脚本而不会失去控制的风险。如果绝对肯定要立即退出(例如,在调用os.fork()之后的子进程中),则可以使用os._exit()函数。
该异常继承自BaseException而不是StandardError或Exception,因此不会被捕获Exception的代码意外捕获。这样可以使异常正确传播并导致解释器退出。
在版本 2.5 中更改:更改为从BaseException继承。
exception
TypeError
- 在将操作或Function应用于不合适类型的对象时引发。关联的值是一个字符串,提供有关类型不匹配的详细信息。
exception
UnboundLocalError
- 在对函数或方法中的局部变量进行引用但没有值绑定到该变量时引发。这是NameError的子类。
2.0 版中的新Function。
- exception
UnicodeError
- 在发生与 Unicode 相关的编码或解码错误时引发。它是ValueError的子类。
UnicodeError具有描述编码或解码错误的属性。例如,err.object[err.start:err.end]
给出编解码器失败的特定无效 Importing。
encoding
- 引发错误的编码的名称。
reason
- 描述特定编解码器错误的字符串。
object
- 编解码器try编码或解码的对象。
start
- object中无效数据的第一个索引。
end
- object中最后一个无效数据之后的索引。
2.0 版中的新Function。
- exception
UnicodeEncodeError
- 在编码过程中发生与 Unicode 相关的错误时引发。它是UnicodeError的子类。
2.3 版的新Function。
- exception
UnicodeDecodeError
- 在解码期间发生与 Unicode 相关的错误时引发。它是UnicodeError的子类。
2.3 版的新Function。
- exception
UnicodeTranslateError
- 在翻译过程中发生 Unicode 相关错误时引发。它是UnicodeError的子类。
2.3 版的新Function。
exception
ValueError
- 当操作或函数接收到类型正确但值不合适的参数时引发,并且情况未由更精确的异常(例如IndexError)描述。
exception
VMSError
- 仅在 VMS 上可用。在发生 VMS 特定错误时引发。
exception
WindowsError
2.0 版中的新Function。
在版本 2.5 中进行了更改:以前的版本将GetLastError()
代码放入errno。
- exception
ZeroDivisionError
- 当除法或模运算的第二个自变量为零时引发。关联值是一个字符串,指示操作数和操作的类型。
以下 exception 用作警告类别;有关更多信息,请参见warnings模块。
exception
Warning
- 警告类别的 Base Class。
exception
UserWarning
- 用户代码生成的警告的 Base Class。
exception
DeprecationWarning
- 有关不推荐使用的Function的警告的 Base Class。
exception
PendingDeprecationWarning
- 有关将来将不推荐使用的Function的警告的 Base Class。
exception
SyntaxWarning
- 警告有关可疑语法的 Base Class。
exception
RuntimeWarning
- 警告有关可疑运行时行为的 Base Class。
exception
FutureWarning
- 警告有关 Base Class 的 Base Class,这些结构将来会在语义上发生变化。
exception
ImportWarning
- 用于警告有关模块导入中可能错误的警告的 Base Class。
2.5 版的新Function。
- exception
UnicodeWarning
- 与 Unicode 相关的警告的 Base Class。
2.5 版的新Function。
- exception
BytesWarning
- 与字节和字节数组有关的警告的 Base Class。
2.6 版的新Function。
6.1. 异常层次
内置异常的类层次结构为:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StandardError
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
| +-- ImportError
| +-- LookupError
| | +-- IndexError
| | +-- KeyError
| +-- MemoryError
| +-- NameError
| | +-- UnboundLocalError
| +-- ReferenceError
| +-- RuntimeError
| | +-- NotImplementedError
| +-- SyntaxError
| | +-- IndentationError
| | +-- TabError
| +-- SystemError
| +-- TypeError
| +-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning