内置异常¶
在Python中,所有异常都必须是派生自 BaseException
. 在一个 try
带有 except
子句提到一个特定的类,该子句还处理从该类派生的任何异常类(但不处理从该类派生的异常类) it 是派生的)。两个不通过子类关联的异常类永远不会是等效的,即使它们具有相同的名称。
下面列出的内置异常可以由解释器或内置函数生成。除了提到的地方,它们有一个“关联值”,指示错误的详细原因。这可能是一个字符串或由多个信息项组成的元组(例如,错误代码和解释代码的字符串)。关联值通常作为参数传递给异常类的构造函数。
用户代码可以引发内置异常。这可用于测试异常处理程序或报告“与”解释程序引发同一异常的情况一样的错误情况;但请注意,没有什么可以防止用户代码引发不适当的错误。
可以对内置异常类进行子类化以定义新的异常;鼓励程序员从 Exception
类或其子类之一,而不是来自 BaseException
.有关定义异常的详细信息,请参见下面的python教程 用户定义异常 .
在引发(或重新引发)异常时 except
或 finally
条款 __context__
自动设置为捕获的最后一个异常;如果未处理新异常,则最终显示的跟踪将包括原始异常和最终异常。
引发新的异常时(而不是使用 raise
要重新引发当前正在处理的异常,可以使用 from
具有 raise
::
raise new_exc from original_exc
下面的表达式 from
必须是例外或 None
. 它将被设置为 __cause__
在引发的异常上。设置 __cause__
还隐式设置 __suppress_context__
属性到 True
,以便使用 raise new_exc from None
有效地将旧的异常替换为新的异常以用于显示目的(例如转换 KeyError
到 AttributeError
,同时将旧的异常保留在 __context__
用于调试时的自省。
除了异常本身的跟踪之外,默认的跟踪显示代码还显示这些链接的异常。中显式链接的异常 __cause__
出现时始终显示。中隐式链接的异常 __context__
仅当 __cause__
是 None
和 __suppress_context__
是假的。
在这两种情况下,异常本身总是显示在任何链接的异常之后,以便跟踪的最后一行总是显示最后一个引发的异常。
基类¶
以下异常主要用作其他异常的基类。
- exception BaseException¶
所有内置异常的基类。它并不打算由用户定义的类直接继承(为此,使用
Exception
)如果str()
在此类的实例上调用,返回实例的参数表示形式,或者在没有参数时返回空字符串。
- exception Exception¶
所有内置的、非系统退出的异常都是从此类派生的。所有用户定义的异常也应从此类派生。
- exception ArithmeticError¶
针对各种算术错误引发的内置异常的基类:
OverflowError
,ZeroDivisionError
,FloatingPointError
.
- exception LookupError¶
在映射或序列上使用的键或索引无效时引发的异常的基类:
IndexError
,KeyError
.这可以直接由codecs.lookup()
.
具体例外情况¶
以下异常是通常引发的异常。
- exception EOFError¶
提出时
input()
函数在不读取任何数据的情况下命中文件结束条件(EOF)。(注意:该io.IOBase.read()
和io.IOBase.readline()
方法在命中eof时返回空字符串。)
- exception FloatingPointError¶
当前未使用。
- exception GeneratorExit¶
升高时 generator 或 coroutine 关闭;见
generator.close()
和coroutine.close()
. 它直接继承自BaseException
而不是Exception
因为这在技术上不是一个错误。
- exception ImportError¶
提出时
import
语句在尝试加载模块时遇到问题。在中的“From List”时也引发from ... import
有一个找不到的名称。这个
name
和path
可以使用构造函数的仅关键字参数设置属性。设置时,它们分别表示尝试导入的模块的名称和触发异常的任何文件的路径。在 3.3 版更改: 增加了
name
和path
属性。
- exception ModuleNotFoundError¶
一个子类
ImportError
它是由import
无法定位模块时。当None
发现于sys.modules
.3.6 新版功能.
- exception KeyError¶
在现有键集中找不到映射(字典)键时引发。
- exception KeyboardInterrupt¶
当用户点击中断键时引发(通常 Control-C 或 Delete )在执行期间,定期检查中断。异常继承自
BaseException
以免被捕获的代码意外捕获Exception
从而防止译员退出。
- exception MemoryError¶
当一个操作耗尽内存,但仍有可能挽救(通过删除一些对象)时引发。关联值是一个字符串,指示哪种(内部)操作耗尽了内存。注意,由于底层内存管理体系结构(C
malloc()
函数),解释器可能并不总是能够完全从这种情况中恢复过来;但是它会引发一个异常,以便在导致程序失控的情况下可以打印堆栈回溯。
- exception NameError¶
在找不到本地或全局名称时引发。这只适用于不合格的名称。关联值是一条错误消息,其中包含找不到的名称。
- exception NotImplementedError¶
此异常源于
RuntimeError
. 在用户定义的基类中,当抽象方法需要派生类来重写该方法时,或者在开发该类以指示仍然需要添加实际实现时,抽象方法应引发此异常。注解
它不应该用于指示一个运算符或方法根本不受支持——在这种情况下,要么不定义该运算符/方法,要么将其设置为
None
.注解
NotImplementedError
和NotImplemented
不可互换,即使它们有相似的名称和目的。见NotImplemented
有关何时使用它的详细信息。
- exception OSError([arg])¶
- exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
当系统函数返回与系统相关的错误(包括“找不到文件”或“磁盘已满”等I/O错误)时,会引发此异常(不适用于非法参数类型或其他附带错误)。
构造函数的第二种形式设置了相应的属性,如下所述。属性默认为
None
如果未指定。为了向后兼容,如果传递了三个参数,则args
属性只包含前两个构造函数参数的两个元组。构造函数通常实际返回
OSError
,如中所述 OS exceptions 下面。特定的子类取决于errno
价值。只有在构造OSError
直接或通过别名,子类化时不继承。- errno¶
来自C变量的数字错误代码
errno
.
- winerror¶
在Windows下,这将提供本机Windows错误代码。这个
errno
然后,属性是该本机错误代码的一个近似转换,用posix术语表示。在Windows下面,如果 Win错误 构造函数参数是一个整数,
errno
属性由Windows错误代码确定,并且 埃尔诺 参数被忽略。在其他平台上, Win错误 参数被忽略,并且winerror
属性不存在。
- strerror¶
操作系统提供的相应错误消息。它由C函数格式化
perror()
在POSIX下,和FormatMessage()
在Windows下。
- filename¶
- filename2¶
对于涉及文件系统路径的异常(例如
open()
或os.unlink()
)filename
是传递给函数的文件名。对于涉及两个文件系统路径的函数(例如os.rename()
)filename2
对应于传递给函数的第二个文件名。
在 3.3 版更改:
EnvironmentError
,IOError
,WindowsError
,socket.error
,select.error
和mmap.error
已合并到OSError
,构造函数可以返回子类。在 3.4 版更改: 这个
filename
属性现在是传递给函数的原始文件名,而不是编码到 filesystem encoding and error handler 。另外, 文件名2 已添加构造函数参数和属性。
- exception OverflowError¶
当算术运算的结果太大而无法表示时引发。这不能发生在整数上(它宁愿
MemoryError
而不是放弃。但是,由于历史原因,有时会对超出所需范围的整数引发溢出错误。由于C语言中缺乏浮点异常处理的标准化,大多数浮点操作都没有进行检查。
- exception RecursionError¶
此异常源于
RuntimeError
. 当解释器检测到最大递归深度(请参见sys.getrecursionlimit()
)超过了。3.5 新版功能: 以前是平原
RuntimeError
提高了。
- exception ReferenceError¶
当弱引用代理(由
weakref.proxy()
函数,用于在被垃圾收集后访问引用的属性。有关弱引用的详细信息,请参见weakref
模块。
- exception RuntimeError¶
在检测到不属于任何其他类别的错误时引发。关联值是一个字符串,指示发生了什么错误。
- exception StopIteration¶
由内置函数引发
next()
和一个 iterator 的__next__()
方法来表示迭代器没有生成其他项。异常对象只有一个属性
value
,在构造异常时作为参数提供,默认为None
.当A generator 或 coroutine 函数返回,新的
StopIteration
引发实例,函数返回的值用作value
异常的构造函数的参数。如果生成器代码直接或间接引发
StopIteration
,它被转换为RuntimeError
(保持StopIteration
作为新例外的原因)。在 3.3 版更改: 补充
value
属性以及生成器函数使用它返回值的能力。在 3.5 版更改: 介绍了runtimeerror转换
from __future__ import generator_stop
见 PEP 479 .在 3.7 版更改: 使能 PEP 479 默认情况下,对于所有代码:
StopIteration
在生成器中引发的错误被转换为RuntimeError
.
- exception StopAsyncIteration¶
必须由提出
__anext__()
AN方法 asynchronous iterator 对象以停止迭代。3.5 新版功能.
- exception SyntaxError¶
在分析器遇到语法错误时引发。这可能发生在
import
语句,在对内置函数的调用中exec()
或eval()
或者在读取初始脚本或标准输入时(也可以交互)。此类的实例具有属性
filename
,lineno
,offset
和text
更方便地访问细节。str()
只返回异常实例的消息。
- exception IndentationError¶
与不正确的缩进相关的语法错误的基类。这是
SyntaxError
.
- exception TabError¶
当缩进包含制表符和空格的不一致使用时引发。这是
IndentationError
.
- exception SystemError¶
当解释器发现内部错误时引发,但这种情况看起来并不严重,因此它放弃了所有希望。关联值是一个字符串,指示出了什么问题(在低级术语中)。
您应该向Python解释器的作者或维护者报告这一点。一定要报告python解释器的版本 (
sys.version
;它也会在交互式Python会话开始时打印)、确切的错误消息(异常的关联值)以及触发错误的程序源(如果可能)。
- exception SystemExit¶
此异常由引发
sys.exit()
功能。它继承自BaseException
而不是Exception
以便它不会被捕获的代码意外捕获Exception
. 这允许异常正确地向上传播并导致解释器退出。如果不处理,则退出python解释器;不打印堆栈回溯。构造函数接受传递给的相同可选参数sys.exit()
.如果该值为整数,则指定系统退出状态(传递到C'sexit()
功能);如果是None
,退出状态为零;如果它有其他类型(如字符串),则打印对象的值,退出状态为一。调用
sys.exit()
转换为异常以便清理处理程序 (finally
条款try
语句)可以执行,这样调试器就可以执行脚本而不会出现失控的风险。这个os._exit()
如果绝对有必要立即退出(例如,在调用之后的子进程中),则可以使用函数os.fork()
)- code¶
传递给构造函数的退出状态或错误消息。(默认为
None
)
- exception TypeError¶
当操作或函数应用于不适当类型的对象时引发。关联值是一个字符串,提供有关类型不匹配的详细信息。
用户代码可能会引发此异常,以指示不支持对对象尝试的操作,并且不打算这样做。如果一个对象打算支持一个给定的操作,但还没有提供一个实现,
NotImplementedError
是适当的例外。传递错误类型的参数(例如传递
list
当一个int
应导致TypeError
,但传递具有错误值的参数(例如,超出预期边界的数字)应导致ValueError
.
- exception UnicodeError¶
在发生与Unicode相关的编码或解码错误时引发。它是
ValueError
.UnicodeError
具有描述编码或解码错误的属性。例如,err.object[err.start:err.end]
提供编解码器失败的特定无效输入。- encoding¶
引发错误的编码的名称。
- reason¶
描述特定编解码器错误的字符串。
- object¶
编解码器试图编码或解码的对象。
- exception UnicodeEncodeError¶
在编码过程中发生与Unicode相关的错误时引发。它是
UnicodeError
.
- exception UnicodeDecodeError¶
在解码过程中发生与Unicode相关的错误时引发。它是
UnicodeError
.
- exception UnicodeTranslateError¶
在转换过程中发生与Unicode相关的错误时引发。它是
UnicodeError
.
- exception ValueError¶
当一个操作或函数接收到一个类型正确但值不正确的参数,并且该情况没有用更精确的异常(如
IndexError
.
- exception ZeroDivisionError¶
当除法或模运算的第二个参数为零时引发。关联值是指示操作数类型和操作的字符串。
为了与以前的版本兼容,保留了以下异常;从Python3.3开始,它们是的别名 OSError
.
- exception EnvironmentError¶
- exception IOError¶
- exception WindowsError¶
仅在Windows上可用。
操作系统异常¶
以下异常是 OSError
,它们将根据系统错误代码进行引发。
- exception BlockingIOError¶
当操作将阻塞为非阻塞操作设置的对象(例如套接字)时引发。相对应
errno
EAGAIN
,EALREADY
,EWOULDBLOCK
和EINPROGRESS
.除了那些
OSError
,BlockingIOError
可以再具有一个属性:
- exception ChildProcessError¶
在子进程上的操作失败时引发。相对应
errno
ECHILD
.
- exception ConnectionError¶
连接相关问题的基类。
子类是
BrokenPipeError
,ConnectionAbortedError
,ConnectionRefusedError
和ConnectionResetError
.
- exception BrokenPipeError¶
一个子类
ConnectionError
当另一端已关闭时尝试在管道上写入,或尝试在已关闭以便写入的套接字上写入时引发。相对应errno
EPIPE
和ESHUTDOWN
.
- exception ConnectionAbortedError¶
一个子类
ConnectionError
,在对等端中止连接尝试时引发。相对应errno
ECONNABORTED
.
- exception ConnectionRefusedError¶
一个子类
ConnectionError
,在对等方拒绝连接尝试时引发。相对应errno
ECONNREFUSED
.
- exception ConnectionResetError¶
一个子类
ConnectionError
,在对等机重置连接时引发。相对应errno
ECONNRESET
.
- exception FileExistsError¶
尝试创建已存在的文件或目录时引发。相对应
errno
EEXIST
.
- exception FileNotFoundError¶
请求文件或目录但不存在时引发。相对应
errno
ENOENT
.
- exception InterruptedError¶
当系统调用被传入信号中断时引发。相对应
errno
EINTR
.在 3.5 版更改: 当系统调用被信号中断时,python现在重试系统调用,除非信号处理程序引发异常(请参见 PEP 475 因为理由),而不是提出
InterruptedError
.
- exception IsADirectoryError¶
当文件操作(例如
os.remove()
)在目录上请求。相对应errno
EISDIR
.
- exception NotADirectoryError¶
当目录操作(例如
os.listdir()
)请求的对象不是目录。相对应errno
ENOTDIR
.
- exception PermissionError¶
尝试运行没有足够访问权限的操作时引发-例如文件系统权限。相对应
errno
EACCES
和EPERM
.
- exception ProcessLookupError¶
当给定进程不存在时引发。相对应
errno
ESRCH
.
- exception TimeoutError¶
在系统级系统函数超时时引发。相对应
errno
ETIMEDOUT
.
3.3 新版功能: 以上所有 OSError
添加了子类。
参见
PEP 3151 -改写操作系统和IO异常层次结构
警告¶
以下异常用作警告类别;请参见 警告类别 有关详细信息的文档。
- exception Warning¶
警告类别的基类。
- exception UserWarning¶
由用户代码生成的警告的基类。
- exception DeprecationWarning¶
用于警告已弃用的功能(当这些警告是针对其他Python开发人员时)的基类。
被默认警告过滤器忽略,除了
__main__
模块 (PEP 565 ). 启用 Python Development Mode 显示此警告。
- exception PendingDeprecationWarning¶
用于警告功能的基类,这些功能已过时,预计将来将被弃用,但目前不被弃用。
此类很少用于发出有关可能即将发生的弃用的警告,这是不寻常的,并且
DeprecationWarning
对于已处于活动状态的弃用,首选。被默认警告筛选器忽略。启用 Python Development Mode 显示此警告。
- exception SyntaxWarning¶
有关可疑语法的警告的基类。
- exception RuntimeWarning¶
有关可疑运行时行为的警告的基类。
- exception FutureWarning¶
当这些警告用于用Python编写的应用程序的最终用户时,用于警告已弃用的功能的基类。
- exception ImportWarning¶
有关模块导入中可能出错的警告的基类。
被默认警告筛选器忽略。启用 Python Development Mode 显示此警告。
- exception UnicodeWarning¶
与Unicode相关的警告的基类。
- exception ResourceWarning¶
与资源使用有关的警告的基类。
被默认警告筛选器忽略。启用 Python Development Mode 显示此警告。
3.2 新版功能.
异常层次结构¶
内置异常的类层次结构为:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
| +-- ModuleNotFoundError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning