内置异常¶
在 Python 中,所有异常都必须是派生自 BaseException
的类的实例。在带有提及特定类的 try
语句的 except
子句中,该子句也处理从该类派生的任何异常类(但不处理它派生的异常类)。即使两个异常类具有相同的名称,如果它们不是通过子类化关联的,则它们永远不等价。
本章列出的内置异常可以由解释器或内置函数生成。除非另有说明,否则它们都具有指示错误详细原因的“关联值”。这可以是字符串或多个信息项的元组(例如,错误代码和解释代码的字符串)。关联值通常作为参数传递给异常类的构造函数。
用户代码可以引发内置异常。这可以用于测试异常处理程序或报告错误情况,就像解释器引发相同异常的情况一样;但请注意,没有什么可以阻止用户代码引发不适当的错误。
内置异常类可以被子类化以定义新的异常;鼓励程序员从 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 版本之间发生变化,从而导致未来出现新的冲突。因此,建议完全避免子类化多个异常类型。
基类¶
以下异常主要用作其他异常的基类。
- exception 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 list” 中存在找不到的名称时也会引发。可选的 name 和 path 仅关键字参数设置相应的属性
- name¶
尝试导入的模块的名称。
- path¶
触发异常的任何文件的路径。
- exception ModuleNotFoundError¶
当找不到模块时,
import
引发的ImportError
的子类。当在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
的子类,如下面的 OS 异常中所述。特定的子类取决于最终的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* 构造函数参数和属性。
- exception OverflowError¶
当算术运算的结果太大而无法表示时引发。这不会发生在整数上(整数会引发
MemoryError
而不是放弃)。但是,出于历史原因,有时会为超出所需范围的整数引发 OverflowError。由于 C 中浮点异常处理缺乏标准化,因此大多数浮点运算都不会进行检查。
- exception PythonFinalizationError¶
此异常派生自
RuntimeError
。当在解释器关闭期间(也称为Python 最终化)操作被阻塞时,会引发此异常。以下是一些在 Python 最终化期间可能被
PythonFinalizationError
阻塞的操作示例:创建新的 Python 线程。
另请参阅
sys.is_finalizing()
函数。3.13 版本新增: 此前,会引发一个普通的
RuntimeError
。
- exception RecursionError¶
此异常派生自
RuntimeError
。当解释器检测到超过最大递归深度(请参阅sys.getrecursionlimit()
)时,会引发此异常。3.5 版本新增: 此前,会引发一个普通的
RuntimeError
。
- exception ReferenceError¶
当使用
weakref.proxy()
函数创建的弱引用代理,在被引用对象被垃圾回收之后,尝试访问该对象的属性时,会引发此异常。有关弱引用的更多信息,请参阅weakref
模块。
- exception RuntimeError¶
当检测到不属于任何其他类别的错误时,会引发此异常。关联的值是一个字符串,指示具体出了什么问题。
- exception 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
。
- exception StopAsyncIteration¶
__anext__()
方法必须由异步迭代器对象引发,以停止迭代。3.5 版本新增。
- exception SyntaxError(message, details)¶
当解析器遇到语法错误时,会引发此异常。这可能发生在
import
语句中,在调用内置函数compile()
、exec()
或eval()
时,或者在读取初始脚本或标准输入时(也包括交互式)。异常实例的
str()
仅返回错误消息。详细信息是一个元组,其成员也可以作为单独的属性访问。- 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
属性。
- exception IndentationError¶
与不正确的缩进相关的语法错误的基类。它是
SyntaxError
的子类。
- exception TabError¶
当缩进包含制表符和空格的不一致使用时,会引发此异常。它是
IndentationError
的子类。
- exception SystemError¶
当解释器发现内部错误,但情况看起来并不严重到导致它放弃所有希望时,会引发此异常。关联的值是一个字符串,指示出了什么问题(以低级术语)。
你应该将此情况报告给你的 Python 解释器的作者或维护者。请务必报告 Python 解释器的版本(
sys.version
;它也会在交互式 Python 会话开始时打印),确切的错误消息(异常的关联值),如果可能,还要报告触发错误的程序源代码。
- exception SystemExit¶
此异常由
sys.exit()
函数引发。它继承自BaseException
而不是Exception
,这样它就不会被捕获Exception
的代码意外捕获。这允许异常正确地向上传播并导致解释器退出。当它未被处理时,Python 解释器会退出;不会打印堆栈回溯。构造函数接受传递给sys.exit()
的相同的可选参数。如果值是一个整数,它指定系统退出状态(传递给 C 的exit()
函数);如果值为None
,则退出状态为零;如果它具有其他类型(例如字符串),则打印对象的值,退出状态为 1。对
sys.exit()
的调用被转换为异常,以便可以执行清理处理程序(finally
子句,在try
语句中),并且调试器可以执行脚本而不会有失去控制的风险。如果绝对有必要立即退出(例如,在调用os.fork()
之后在子进程中),可以使用os._exit()
函数。- code¶
传递给构造函数的退出状态或错误消息。(默认为
None
。)
- exception TypeError¶
当操作或函数应用于不适当类型的对象时引发。关联的值是一个字符串,提供了有关类型不匹配的详细信息。
用户代码可以引发此异常,以指示尝试对对象进行的操作不受支持,并且不打算支持。如果一个对象打算支持给定的操作但尚未提供实现,则应该引发
NotImplementedError
异常。传递错误类型的参数(例如,当期望一个
int
时传递一个list
)应该导致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¶
当除法或取模运算的第二个参数为零时引发。关联的值是一个字符串,指示操作数和运算的类型。
以下异常是为了与以前的版本兼容而保留的;从 Python 3.3 开始,它们是 OSError
的别名。
- exception EnvironmentError¶
- exception IOError¶
- exception WindowsError¶
仅在 Windows 上可用。
OS 异常¶
以下异常是 OSError
的子类,它们会根据系统错误代码引发。
- exception BlockingIOError¶
当在设置为非阻塞操作的对象(例如,套接字)上进行操作会导致阻塞时引发。对应于
errno
EAGAIN
、EALREADY
、EWOULDBLOCK
和EINPROGRESS
。除了
OSError
的属性之外,BlockingIOError
还可以有一个附加属性
- 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 InterruptedError¶
当系统调用被传入信号中断时引发。 对应于
errno
EINTR
。在 3.5 版本中更改: Python 现在会在系统调用被信号中断时重试系统调用,除非信号处理程序引发异常 (请参阅 PEP 475 了解原因),而不是引发
InterruptedError
。
- exception IsADirectoryError¶
当对目录请求文件操作(例如
os.remove()
)时引发。 对应于errno
EISDIR
。
- exception NotADirectoryError¶
当对不是目录的内容请求目录操作(例如
os.listdir()
)时引发。 在大多数 POSIX 平台上,如果操作尝试将非目录文件作为目录打开或遍历,也可能会引发此错误。 对应于errno
ENOTDIR
。
- exception 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
。条件可以是异常类型或异常类型元组,在这种情况下,将使用
except
子句中使用的相同检查来检查每个异常是否匹配。条件也可以是可调用对象(类型对象除外),它接受一个异常作为其单个参数,并为应该在子组中的异常返回 true。当前异常的嵌套结构将保留在结果中,其
message
、__traceback__
、__cause__
、__context__
和__notes__
字段的值也将保留。结果中将省略空的嵌套组。将检查嵌套异常组(包括顶层和任何嵌套异常组)中的所有异常的条件。如果条件对于这样的异常组为 true,则将其完整地包含在结果中。
在 3.13 版本中新增:
condition
可以是任何不是类型对象的可调用对象。
- 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 并从中构造组消息的异常组子类。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
类似,任何也是Exception
子类的BaseExceptionGroup
子类,只能包装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
│ ├── PythonFinalizationError
│ └── 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