内置异常¶
在 Python 中,所有异常都必须是从 BaseException
派生的类的实例。在一个带有提及特定类的 except
子句的 try
语句中,该子句也会处理从该类派生的任何异常类(但不处理从 *它* 派生的异常类)。两个不通过子类化相关的异常类永远不会相等,即使它们具有相同的名称。
本章列出的内置异常可以由解释器或内置函数生成。除非另有说明,否则它们都有一个“关联值”,指示错误的详细原因。这可以是一个字符串,也可以是包含多个信息项的元组(例如,错误代码和解释该代码的字符串)。关联值通常作为参数传递给异常类的构造函数。
用户代码可以引发内置异常。这可以用来测试异常处理程序,或者报告“就像”解释器引发相同异常的情况一样的错误情况;但要注意,没有什么可以阻止用户代码引发不适当的错误。
可以对内置异常类进行子类化以定义新的异常;鼓励程序员从 Exception
类或其子类之一派生新的异常,而不是从 BaseException
派生。有关定义异常的更多信息,请参阅 Python 教程中的 用户定义的异常。
异常上下文¶
异常对象上的三个属性提供了有关引发异常的上下文的信息
- BaseException.__context__¶
- BaseException.__cause__¶
- BaseException.__suppress_context__¶
当在另一个异常已经被处理时引发新的异常时,新异常的
__context__
属性会自动设置为被处理的异常。当使用except
或finally
子句或with
语句时,可能会处理异常。可以通过在
raise
中使用from
来补充此隐式异常上下文和显式原因raise new_exc from original_exc
from
后面的表达式必须是一个异常或None
。它将在引发的异常上设置为__cause__
。设置__cause__
也会隐式地将__suppress_context__
属性设置为True
,以便使用raise new_exc from None
有效地将旧异常替换为新异常以用于显示目的(例如,将KeyError
转换为AttributeError
),同时将旧异常保留在__context__
中,以便在调试时进行内省。默认的回溯显示代码会显示这些链接的异常,以及异常本身的回溯。如果存在显式链接的异常(在
__cause__
中),则始终会显示它。仅当__cause__
为None
且__suppress_context__
为 false 时,才会显示隐式链接的异常(在__context__
中)。无论哪种情况,异常本身始终都会在任何链接的异常之后显示,以便回溯的最后一行始终显示引发的最后一个异常。
继承内置异常¶
用户代码可以创建继承自异常类型的子类。建议一次只继承一个异常类型,以避免基类如何处理 args
属性之间可能出现的任何冲突,以及由于可能的内存布局不兼容性。
**CPython 实现细节:** 大多数内置异常都是用 C 语言实现的,以提高效率,请参阅:Objects/exceptions.c。有些异常具有自定义内存布局,这使得无法创建继承自多个异常类型的子类。类型的内存布局是实现细节,可能会在 Python 版本之间发生变化,从而在未来导致新的冲突。因此,建议完全避免继承多个异常类型。
基类¶
以下异常主要用作其他异常的基类。
- 异常 BaseException¶
所有内置异常的基类。它不打算直接被用户定义的类继承(为此,请使用
Exception
)。如果在此类的实例上调用str()
,则返回实例参数的表示形式,如果没有参数,则返回空字符串。- with_traceback(tb)¶
此方法将 *tb* 设置为异常的新回溯,并返回异常对象。在 PEP 3134 的异常链接功能可用之前,它更常用。以下示例显示了如何在保留回溯的同时将
SomeException
的实例转换为OtherException
的实例。引发后,当前帧将被推送到OtherException
的回溯中,就像如果我们允许原始SomeException
传播到调用者,则会发生在其回溯中一样。try: ... except SomeException: tb = sys.exception().__traceback__ raise OtherException(...).with_traceback(tb)
- __notes__¶
此异常的注释列表,这些注释是使用
add_note()
添加的。此属性在调用add_note()
时创建。3.11 版新增。
- exception Exception¶
所有内置的、非系统退出的异常都派生自此类。所有用户定义的异常也应该派生自此类。
- exception ArithmeticError¶
为各种算术错误引发的内置异常的基类:
OverflowError
、ZeroDivisionError
、FloatingPointError
。
- exception LookupError¶
当在映射或序列上使用的键或索引无效时引发的异常的基类:
IndexError
、KeyError
。这可以通过codecs.lookup()
直接引发。
具体异常¶
以下异常是通常引发的异常。
- exception AttributeError¶
当属性引用(请参阅 属性引用)或赋值失败时引发。(当一个对象根本不支持属性引用或属性赋值时,会引发
TypeError
。)name
和obj
属性可以使用仅限关键字的参数设置给构造函数。设置后,它们分别表示尝试访问的属性的名称和为该属性访问的对象。在 3.10 版更改: 添加了
name
和obj
属性。
- exception EOFError¶
当
input()
函数在没有读取任何数据的情况下遇到文件结束条件 (EOF) 时引发。(注意:io.IOBase.read()
和io.IOBase.readline()
方法在遇到 EOF 时返回一个空字符串。)
- exception FloatingPointError¶
当前未使用。
- exception GeneratorExit¶
在 生成器 或 协程 关闭时引发;请参阅
generator.close()
和coroutine.close()
。它直接继承自BaseException
而不是Exception
,因为它在技术上不是错误。
- exception ImportError¶
当
import
语句尝试加载模块遇到问题时引发。当from ... import
中的“from 列表”具有无法找到的名称时,也会引发此异常。可选的仅关键字参数 name 和 path 设置相应的属性
- name¶
尝试导入的模块的名称。
- path¶
触发异常的任何文件的路径。
- exception ModuleNotFoundError¶
ImportError
的子类,当import
找不到模块时引发。当在sys.modules
中找到None
时,也会引发此异常。3.6 版新增。
- exception KeyError¶
在映射(字典)中找不到键时引发。
- exception KeyboardInterrupt¶
当用户按下中断键(通常是 Control-C 或 Delete)时引发。在执行过程中,会定期检查中断。该异常继承自
BaseException
,以避免被捕获Exception
的代码意外捕获,从而阻止解释器退出。注意
捕获
KeyboardInterrupt
需要特别注意。因为它可以在不可预测的点引发,所以在某些情况下,它可能会使正在运行的程序处于不一致的状态。通常最好允许KeyboardInterrupt
尽快结束程序或完全避免引发它。(请参阅 关于信号处理程序和异常的注意事项。)
- exception MemoryError¶
当操作内存不足但情况仍可挽救(通过删除一些对象)时引发。关联的值是一个字符串,指示哪种(内部)操作内存不足。请注意,由于底层内存管理架构(C 的
malloc()
函数),解释器可能无法始终从此类情况下完全恢复;但它仍然会引发异常,以便可以打印堆栈回溯,以防万一是失控程序导致的。
- exception NameError¶
当找不到本地或全局名称时引发。这仅适用于非限定名称。关联的值是一个错误消息,其中包含无法找到的名称。
name
属性可以使用仅关键字参数在构造函数中设置。设置后,它表示尝试访问的变量的名称。在 3.10 版更改: 添加了
name
属性。
- exception NotImplementedError¶
此异常派生自
RuntimeError
。在用户定义的基类中,当抽象方法需要派生类重写该方法时,或者在开发类时指示仍需要添加实际实现时,应引发此异常。注意
它不应该用于表示根本不支持某个运算符或方法——在这种情况下,要么将运算符/方法保留为未定义,要么(如果是子类)将其设置为
None
。注意
NotImplementedError
和NotImplemented
不可互换,即使它们的名称和用途相似。有关何时使用它的详细信息,请参阅NotImplemented
。
- exception OSError([arg])¶
- exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
当系统函数返回系统相关错误时引发此异常,包括 I/O 错误,例如“文件未找到”或“磁盘已满”(不是针对非法参数类型或其他偶然错误)。
构造函数的第二种形式设置了相应的属性,如下所述。如果未指定,则属性默认为
None
。为了向后兼容,如果传递了三个参数,则args
属性仅包含前两个构造函数参数的 2 元组。如下面的 操作系统异常 中所述,构造函数通常实际上返回
OSError
的子类。特定的子类取决于最终的errno
值。此行为仅在直接或通过别名构造OSError
时发生,并且在子类化时不会继承。- errno¶
来自 C 变量
errno
的数字错误代码。
- winerror¶
在 Windows 下,这将为您提供本机 Windows 错误代码。然后,
errno
属性就是该本机错误代码的近似翻译,用 POSIX 术语表示。在 Windows 系统下,如果 winerror 构造函数参数是一个整数,则
errno
属性由 Windows 错误代码确定,并且 errno 参数将被忽略。在其他平台上,winerror 参数会被忽略,并且winerror
属性不存在。
- strerror¶
操作系统提供的相应错误消息。它由 POSIX 下的 C 函数
perror()
和 Windows 下的FormatMessage()
格式化。
- filename¶
- filename2¶
对于涉及文件系统路径的异常(例如
open()
或os.unlink()
),filename
是传递给函数的文件名。对于涉及两个文件系统路径的函数(例如os.rename()
),filename2
对应于传递给函数的第二个文件名。
在 3.3 版更改:
EnvironmentError
、IOError
、WindowsError
、socket.error
、select.error
和mmap.error
已合并到OSError
中,并且构造函数可能会返回一个子类。在 3.4 版更改:
filename
属性现在是传递给函数的原始文件名,而不是编码为 文件系统编码和错误处理程序 或从其解码的名称。此外,还添加了 filename2 构造函数参数和属性。
- 异常 OverflowError¶
当算术运算的结果太大而无法表示时引发。这不会发生在整数上(它们宁愿引发
MemoryError
而不是放弃)。但是,由于历史原因,有时会在整数超出所需范围时引发 OverflowError。由于 C 语言中缺少浮点异常处理的标准化,因此不会检查大多数浮点运算。
- 异常 RecursionError¶
此异常派生自
RuntimeError
。当解释器检测到超过最大递归深度(请参阅sys.getrecursionlimit()
)时,会引发此异常。3.5 版新增: 以前,会引发普通的
RuntimeError
。
- 异常 ReferenceError¶
当由
weakref.proxy()
函数创建的弱引用代理在引用对象被垃圾回收后用于访问其属性时,会引发此异常。有关弱引用的更多信息,请参阅weakref
模块。
- 异常 RuntimeError¶
当检测到不属于任何其他类别的错误时引发。关联的值是一个字符串,指示具体出了什么问题。
- 异常 StopIteration¶
由内置函数
next()
和 迭代器 的__next__()
方法引发,表示迭代器没有生成更多项。当 生成器 或 协程 函数返回时,会引发一个新的
StopIteration
实例,并且函数返回的值将用作异常构造函数的value
参数。如果生成器代码直接或间接引发
StopIteration
,它将被转换为RuntimeError
(保留StopIteration
作为新异常的原因)。在 3.3 版更改: 添加了
value
属性以及生成器函数使用它返回值的功能。在 3.5 版更改: 通过
from __future__ import generator_stop
引入了 RuntimeError 转换,请参阅 PEP 479。3.7 版更改: 默认情况下为所有代码启用 PEP 479: 在生成器中引发的
StopIteration
错误会被转换为RuntimeError
。
- 异常 StopAsyncIteration¶
必须由
__anext__()
方法引发,该方法属于 异步迭代器 对象,用于停止迭代。3.5 版新增。
- 异常 SyntaxError(message, details)¶
当解析器遇到语法错误时引发。这可能发生在
import
语句中,在调用内置函数compile()
、exec()
或eval()
时,或者在读取初始脚本或标准输入(也包括交互式)时。异常实例的
str()
只返回错误消息。Details 是一个元组,其成员也可以作为单独的属性使用。- filename¶
发生语法错误的文件的名称。
- lineno¶
文件中发生错误的行号。这是从 1 开始索引的:文件中的第一行的
lineno
为 1。
- offset¶
行中发生错误的列。这是从 1 开始索引的:行中的第一个字符的
offset
为 1。
- text¶
涉及错误的源代码文本。
- end_lineno¶
文件中发生错误的行号结束于哪一行。这是从 1 开始索引的:文件中的第一行的
lineno
为 1。
- end_offset¶
错误发生结束的行中的列。这是从 1 开始索引的:行中的第一个字符的
offset
为 1。
对于 f 字符串字段中的错误,消息前缀为“f-string: ”,并且偏移量是根据替换表达式构造的文本中的偏移量。例如,编译 f'Bad {a b} field' 会导致 args 属性为:('f-string: …', ('', 1, 2, '(a b)n', 1, 5))。
3.10 版更改: 添加了
end_lineno
和end_offset
属性。
- 异常 IndentationError¶
与不正确的缩进相关的语法错误的基类。这是
SyntaxError
的子类。
- 异常 TabError¶
当缩进包含不一致的使用制表符和空格时引发。这是
IndentationError
的子类。
- 异常 SystemError¶
当解释器发现内部错误,但情况看起来不那么严重以至于放弃所有希望时引发。关联的值是一个字符串,指示出现了什么问题(以低级术语表示)。
您应该向 Python 解释器的作者或维护者报告此问题。请务必报告 Python 解释器的版本(
sys.version
;它也会在交互式 Python 会话开始时打印)、确切的错误消息(异常的关联值),以及如果可能的话,触发错误的程序的源代码。
- 异常 SystemExit¶
此异常由
sys.exit()
函数引发。它继承自BaseException
而不是Exception
,因此它不会被捕获Exception
的代码意外捕获。这允许异常正确地向上抛出并导致解释器退出。当它没有被处理时,Python 解释器退出;不打印堆栈回溯。构造函数接受传递给sys.exit()
的相同可选参数。如果该值为整数,则它指定系统退出状态(传递给 C 的exit()
函数);如果它是None
,则退出状态为零;如果它是其他类型(例如字符串),则打印对象的 value,退出状态为 1。对
sys.exit()
的调用被转换为异常,以便可以执行清理处理程序(finally
子句try
语句),并且调试器可以执行脚本而不会有失去控制的风险。如果绝对必须立即退出(例如,在调用os.fork()
之后的子进程中),则可以使用os._exit()
函数。- code¶
传递给构造函数的退出状态或错误消息。(默认为
None
。)
- 异常 TypeError¶
当对不适当类型的对象应用操作或函数时引发。关联的值是一个字符串,其中包含有关类型不匹配的详细信息。
用户代码可能会引发此异常,以指示对对象的尝试操作不受支持,并且也不打算支持。如果一个对象打算支持给定的操作但尚未提供实现,则应引发
NotImplementedError
异常。传递错误类型的参数(例如,在预期
int
时传递list
)应该会导致TypeError
,但传递具有错误值的参数(例如,超出预期范围的数字)应该会导致ValueError
。
- 异常 UnicodeError¶
在发生与 Unicode 相关的编码或解码错误时引发。它是
ValueError
的子类。UnicodeError
具有描述编码或解码错误的属性。例如,err.object[err.start:err.end]
给出了编解码器失败的特定无效输入。- encoding¶
引发错误的编码的名称。
- reason¶
描述特定编解码器错误的字符串。
- object¶
编解码器尝试编码或解码的对象。
- 异常 UnicodeEncodeError¶
在编码过程中发生与 Unicode 相关的错误时引发。它是
UnicodeError
的子类。
- 异常 UnicodeDecodeError¶
在解码过程中发生与 Unicode 相关的错误时引发。它是
UnicodeError
的子类。
- 异常 UnicodeTranslateError¶
在转换过程中发生与 Unicode 相关的错误时引发。它是
UnicodeError
的子类。
- 异常 ValueError¶
当操作或函数接收到类型正确但值不合适的参数,并且情况没有更精确的异常(例如
IndexError
)描述时引发。
- 异常 ZeroDivisionError¶
当除法或模运算的第二个参数为零时引发。关联的值是一个字符串,指示操作数的类型和操作。
以下异常是为了与以前的版本兼容而保留的;从 Python 3.3 开始,它们是 OSError
的别名。
- 异常 EnvironmentError¶
- 异常 IOError¶
- 异常 WindowsError¶
仅在 Windows 上可用。
操作系统异常¶
以下异常是 OSError
的子类,它们根据系统错误代码引发。
- 异常 BlockingIOError¶
当操作将在设置为非阻塞操作的对象(例如套接字)上阻塞时引发。对应于
errno
EAGAIN
、EALREADY
、EWOULDBLOCK
和EINPROGRESS
。除了
OSError
的属性之外,BlockingIOError
还可以有一个额外的属性
- 异常 ConnectionError¶
与连接相关问题的基类。
子类有
BrokenPipeError
、ConnectionAbortedError
、ConnectionRefusedError
和ConnectionResetError
。
- 异常 BrokenPipeError¶
ConnectionError
的子类,当试图写入一个管道而另一端已关闭时引发,或试图写入一个已关闭写入的套接字时引发。对应于errno
EPIPE
和ESHUTDOWN
。
- 异常 ConnectionAbortedError¶
ConnectionError
的子类,当连接尝试被对方中止时引发。对应于errno
ECONNABORTED
。
- 异常 ConnectionRefusedError¶
ConnectionError
的子类,当连接尝试被对方拒绝时引发。对应于errno
ECONNREFUSED
。
- 异常 ConnectionResetError¶
ConnectionError
的子类,当连接被对方重置时引发。对应于errno
ECONNRESET
。
- 异常 InterruptedError¶
当系统调用被传入信号中断时引发。对应于
errno
EINTR
。在 3.5 版更改: 现在,当系统调用被信号中断时,Python 会重试系统调用,除非信号处理程序引发异常(有关其理由,请参阅 PEP 475),而不是引发
InterruptedError
。
- 异常 IsADirectoryError¶
当在目录上请求文件操作(例如
os.remove()
)时引发。对应于errno
EISDIR
。
- 异常 NotADirectoryError¶
当在非目录上请求目录操作(例如
os.listdir()
)时引发。在大多数 POSIX 平台上,如果操作尝试打开或遍历非目录文件(如同它是目录一样),也可能引发此异常。对应于errno
ENOTDIR
。
- 异常 PermissionError¶
当试图在没有足够访问权限(例如文件系统权限)的情况下运行操作时引发。对应于
errno
EACCES
、EPERM
和ENOTCAPABLE
。在 3.11.1 版更改: WASI 的
ENOTCAPABLE
现在映射到PermissionError
。
3.3 版新增: 以上所有 OSError
子类均已添加。
另请参阅
PEP 3151 - 重构 OS 和 IO 异常层次结构
警告¶
以下异常用作警告类别;有关更多详细信息,请参阅警告类别文档。
- exception Warning¶
警告类别的基类。
- exception UserWarning¶
用户代码生成的警告的基类。
- exception DeprecationWarning¶
当有关已弃用功能的警告面向其他 Python 开发人员时,将使用此基类。
默认警告过滤器会忽略此警告,但在
__main__
模块中除外(PEP 565)。启用Python 开发模式会显示此警告。PEP 387 中描述了弃用策略。
- exception PendingDeprecationWarning¶
有关已过时且预计将来会被弃用的功能的警告的基类,但目前尚未弃用。
此类很少使用,因为发出有关可能即将弃用的警告是不常见的,并且对于已经处于活动状态的弃用,
DeprecationWarning
更受欢迎。默认警告过滤器会忽略此警告。启用Python 开发模式会显示此警告。
PEP 387 中描述了弃用策略。
- exception SyntaxWarning¶
有关可疑语法的警告的基类。
- exception RuntimeWarning¶
有关可疑运行时行为的警告的基类。
- exception FutureWarning¶
当有关已弃用功能的警告面向使用 Python 编写的应用程序的最终用户时,将使用此基类。
- exception ImportWarning¶
有关模块导入中可能出现的错误的警告的基类。
默认警告过滤器会忽略此警告。启用Python 开发模式会显示此警告。
- exception UnicodeWarning¶
与 Unicode 相关的警告的基类。
- exception EncodingWarning¶
与编码相关的警告的基类。
有关详细信息,请参阅选择加入 EncodingWarning。
3.10 版新增。
- exception ResourceWarning¶
与资源使用相关的警告的基类。
默认警告过滤器会忽略此警告。启用Python 开发模式会显示此警告。
3.2 版新增。
异常组¶
以下是在需要引发多个不相关的异常时使用的。它们是异常层次结构的一部分,因此可以使用 except
像处理所有其他异常一样处理它们。此外,except*
可以识别它们,它根据包含的异常类型匹配它们的子组。
- exception ExceptionGroup(msg, excs)¶
- exception BaseExceptionGroup(msg, excs)¶
这两种异常类型都包装了序列
excs
中的异常。msg
参数必须是字符串。这两个类的区别在于BaseExceptionGroup
扩展了BaseException
并且可以包装任何异常,而ExceptionGroup
扩展了Exception
并且只能包装Exception
的子类。这种设计是为了让except Exception
捕获ExceptionGroup
而不是BaseExceptionGroup
。如果所有包含的异常都是
Exception
实例,则BaseExceptionGroup
构造函数返回ExceptionGroup
而不是BaseExceptionGroup
,因此可以使用它来自动进行选择。另一方面,如果任何包含的异常不是Exception
子类,则ExceptionGroup
构造函数会引发TypeError
。- message¶
构造函数的
msg
参数。这是一个只读属性。
- exceptions¶
传递给构造函数的
excs
序列中的异常元组。这是一个只读属性。
- subgroup(condition)¶
返回一个异常组,该组仅包含当前组中与 *condition* 匹配的异常,如果结果为空,则返回
None
。条件可以是一个函数,该函数接受一个异常并为子组中应该包含的异常返回 true,也可以是一个异常类型或异常类型元组,用于使用与
except
子句中相同的检查来检查匹配项。当前异常的嵌套结构将保留在结果中,其
message
、__traceback__
、__cause__
、__context__
和__notes__
字段的值也是如此。结果中将省略空的嵌套组。将检查嵌套异常组中的所有异常的条件,包括顶级异常组和任何嵌套异常组。如果此类异常组的条件为 true,则将其完整包含在结果中。
- split(condition)¶
与
subgroup()
类似,但返回对(match, rest)
,其中match
是subgroup(condition)
,而rest
是剩余的不匹配部分。
- derive(excs)¶
返回一个具有相同
message
的异常组,但它包装了excs
中的异常。此方法由
subgroup()
和split()
使用,它们在各种上下文中用于分解异常组。子类需要覆盖它,以便使subgroup()
和split()
返回子类的实例,而不是ExceptionGroup
。subgroup()
和split()
将__traceback__
、__cause__
、__context__
和__notes__
字段从原始异常组复制到derive()
返回的异常组,因此这些字段不需要由derive()
更新。>>> class MyGroup(ExceptionGroup): ... def derive(self, excs): ... return MyGroup(self.message, excs) ... >>> e = MyGroup("eg", [ValueError(1), TypeError(2)]) >>> e.add_note("a note") >>> e.__context__ = Exception("context") >>> e.__cause__ = Exception("cause") >>> try: ... raise e ... except Exception as e: ... exc = e ... >>> match, rest = exc.split(ValueError) >>> exc, exc.__context__, exc.__cause__, exc.__notes__ (MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note']) >>> match, match.__context__, match.__cause__, match.__notes__ (MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note']) >>> rest, rest.__context__, rest.__cause__, rest.__notes__ (MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note']) >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True
请注意,
BaseExceptionGroup
定义了__new__()
,因此需要不同构造函数签名的子类需要覆盖它,而不是__init__()
。例如,以下定义了一个异常组子类,它接受一个 exit_code 并从中构造组的 message。class Errors(ExceptionGroup): def __new__(cls, errors, exit_code): self = super().__new__(Errors, f"exit code: {exit_code}", errors) self.exit_code = exit_code return self def derive(self, excs): return Errors(excs, self.exit_code)
与
ExceptionGroup
一样,任何既是BaseExceptionGroup
的子类又是Exception
的子类的子类都只能包装Exception
的实例。3.11 版新增。
异常层次结构¶
内置异常的类层次结构为
BaseException
├── BaseExceptionGroup
├── GeneratorExit
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── FloatingPointError
│ ├── OverflowError
│ └── ZeroDivisionError
├── AssertionError
├── AttributeError
├── BufferError
├── EOFError
├── ExceptionGroup [BaseExceptionGroup]
├── 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
├── StopAsyncIteration
├── StopIteration
├── SyntaxError
│ └── IndentationError
│ └── TabError
├── SystemError
├── TypeError
├── ValueError
│ └── UnicodeError
│ ├── UnicodeDecodeError
│ ├── UnicodeEncodeError
│ └── UnicodeTranslateError
└── Warning
├── BytesWarning
├── DeprecationWarning
├── EncodingWarning
├── FutureWarning
├── ImportWarning
├── PendingDeprecationWarning
├── ResourceWarning
├── RuntimeWarning
├── SyntaxWarning
├── UnicodeWarning
└── UserWarning