Python异常处理--官网摘录

异常层次结构

内置异常的类层级结构如下:

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
           +-- EncodingWarning
           +-- ResourceWarning

 异常名称和描述:

基类描述
BaseException所有内置异常的基类。 它不应该被用户自定义类直接继承 (这种情况请使用 Exception)。
Exception所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类。
ArithmeticError此基类用于派生针对各种算术类错误而引发的内置异常: OverflowError, ZeroDivisionError, FloatingPointError。
BufferError当与 缓冲区 相关的操作无法执行时将被引发。
LookupError此基类用于派生当映射或序列所使用的键或索引无效时引发的异常: IndexError, KeyError。 这可以通过 codecs.lookup() 来直接引发。
具体异常描述
AssertionError当 assert 语句失败时将被引发。
AttributeError当属性引用 (参见 属性引用) 或赋值失败时将被引发。 (当一个对象根本不支持属性引用或属性赋值时则将引发 TypeError。)
EOFError当 input() 函数未读取任何数据即达到文件结束条件 (EOF) 时将被引发。 (另外,io.IOBase.read() 和 io.IOBase.readline() 方法在遇到 EOF 则将返回一个空字符串。)
FloatingPointError目前未被使用。
GeneratorExit当一个 generator 或 coroutine 被关闭时将被引发;参见 generator.close() 和 coroutine.close()。 它直接继承自 BaseException 而不是 Exception,因为从技术上来说它并不是一个错误。
ImportError当 import 语句尝试加载模块遇到麻烦时将被引发。 并且当 from ... import 中的 "from list" 存在无法找到的名称时也会被引发。
ModuleNotFoundErrorImportError 的子类,当一个模块无法被定位时将由 import 引发。 当在 sys.modules 中找到 None 时也会被引发。
IndexError当序列抽取超出范围时将被引发。 (切片索引会被静默截短到允许的范围;如果指定索引不是整数则 TypeError 会被引发。)
KeyError当在现有键集合中找不到指定的映射(字典)键时将被引发。
KeyboardInterrupt用户按下中断键 (通常为 Control-C 或 Delete) 时将被引发。 在执行期间,会定期检测中断信号。 该异常继承自 BaseException 以确保不会被处理 Exception 的代码意外捕获,这样可以避免退出解释器。
MemoryError当一个操作耗尽内存但情况仍可(通过删除一些对象)进行挽救时将被引发。 关联的值是一个字符串,指明是哪种(内部)操作耗尽了内存。 请注意由于底层的内存管理架构(C 的 malloc() 函数),解释器也许并不总是能够从这种情况下完全恢复;但它毕竟可以引发一个异常,这样就能打印出栈回溯信息,以便找出导致问题的失控程序。
NameError当某个局部或全局名称未找到时将被引发。 此异常仅用于非限定名称。 关联的值是一条错误信息,其中包含未找到的名称。
NotImplementedError此异常派生自 RuntimeError。 在用户自定义的基类中,抽象方法应当在其要求所派生类重载该方法,或是在其要求所开发的类提示具体实现尚待添加时引发此异常。
OSError此异常在一个系统函数返回系统相关的错误时将被引发,此类错误包括 I/O 操作失败例如 "文件未找到" 或 "磁盘已满" 等(不包括非法参数类型或其他偶然性错误)。
OverflowError当算术运算的结果大到无法表示时将被引发。 这对整数来说不可能发生(宁可引发 MemoryError 也不会放弃尝试)。 但是出于历史原因,有时也会在整数超出要求范围的情况下引发 OverflowError。 因为在 C 中缺少对浮点异常处理的标准化,大多数浮点运算都不会做检查。
RecursionError此异常派生自 RuntimeError。 它会在解释器检测发现超过最大递归深度 (参见 sys.getrecursionlimit()) 时被引发。
ReferenceError此异常将在使用 weakref.proxy() 函数所创建的弱引用来访问该引用的某个已被作为垃圾回收的属性时被引发。
RuntimeError当检测到一个不归属于任何其他类别的错误时将被引发。 关联的值是一个指明究竟发生了什么问题的字符串。
StopIteration由内置函数 next() 和 iterator 的 __next__() 方法所引发,用来表示该迭代器不能产生下一项。
StopAsyncIteration必须由一个 asynchronous iterator 对象的 __anext__() 方法来引发以停止迭代操作。
SyntaxError当解析器遇到语法错误时引发。 这可以发生在 import 语句,对内置函数 compile(), exec() 或 eval() 的调用,或是读取原始脚本或标准输入(也包括交互模式)的时候。
IndentationError与不正确的缩进相关的语法错误的基类。 这是 SyntaxError 的一个子类。
TabError当缩进包含对制表符和空格符不一致的使用时将被引发。 这是 IndentationError 的一个子类。
SystemError当解释器发现内部错误,但情况看起来尚未严重到要放弃所有希望时将被引发。 关联的值是一个指明发生了什么问题的字符串(表示为低层级的符号)。
SystemExit此异常由 sys.exit() 函数引发。 它继承自 BaseException 而不是 Exception 以确保不会被处理 Exception 的代码意外捕获。 这允许此异常正确地向上传播并导致解释器退出。 如果它未被处理,则 Python 解释器就将退出;不会打印任何栈回溯信息。 构造器接受的可选参数与传递给 sys.exit() 的相同。 如果该值为一个整数,则它指明系统退出状态码(会传递给 C 的 exit() 函数);如果该值为 None,则退出状态码为零;如果该值为其他类型(例如字符串),则会打印对象的值并将退出状态码设为一。
TypeError当一个操作或函数被应用于类型不适当的对象时将被引发。 关联的值是一个字符串,给出有关类型不匹配的详情。
UnboundLocalError当在函数或方法中对某个局部变量进行引用,但该变量并未绑定任何值时将被引发。 此异常是 NameError 的一个子类。
UnicodeError当发生与 Unicode 相关的编码或解码错误时将被引发。 此异常是 ValueError 的一个子类。
UnicodeEncodeError当在编码过程中发生与 Unicode 相关的错误时将被引发。 此异常是 UnicodeError 的一个子类。
UnicodeDecodeError当在解码过程中发生与 Unicode 相关的错误时将被引发。 此异常是 UnicodeError 的一个子类。
UnicodeTranslateError在转写过程中发生与 Unicode 相关的错误时将被引发。 此异常是 UnicodeError 的一个子类。
ValueError当操作或函数接收到具有正确类型但值不适合的参数,并且情况不能用更精确的异常例如 IndexError 来描述时将被引发。
ZeroDivisionError当除法或取余运算的第二个参数为零时将被引发。 关联的值是一个字符串,指明操作数和运算的类型。
OS 异常描述:下列异常均为 OSError 的子类,它们将根据系统错误代码被引发。
BlockingIOError当操作将阻塞设置为非阻塞操作的对象(例如套接字)时引发。对应于 errno EAGAIN、EALREADY、EWOULDBLOCK 和 EINPROGRESS。
ChildProcessError当对子进程的操作失败时引发。对应于 errno ECHILD。
ConnectionError与连接相关问题的基类。
BrokenPipeErrorConnectionError 的子类,在另一端已关闭时尝试在管道上写入,或尝试在已关闭写入的套接字上写入时引发。对应于 errno EPIPE 和 ESHUTDOWN。
ConnectionAbortedErrorConnectionError 的子类,在对等方中止连接尝试时引发。对应于 errno ECONABORTED。
ConnectionRefusedErrorConnectionError 的子类,当连接尝试被对等方拒绝时引发。对应于 errno ECONNREFUSED。
ConnectionResetErrorConnectionError 的子类,在对等方重置连接时引发。对应于 errno ECONNRESET。
FileExistsError在尝试创建已存在的文件或目录时引发。对应于 errno EEXIST。
FileNotFoundError当请求文件或目录但不存在时引发。对应于 errno ENOENT。
InterruptedError当系统调用被输入信号中断时将被引发。 对应于 errno EINTR
IsADirectoryError在目录上请求文件操作(例如 os.remove())时引发。对应于 errno EISDIR。
NotADirectoryError当在不是目录的东西上请求目录操作(例如 os.listdir())时引发。在大多数 POSIX 平台上,如果操作尝试打开或遍历非目录文件,就好像它是目录一样,也可能会引发它。对应于 errno ENOTDIR。
PermissionError在尝试运行没有足够访问权限的操作时引发 - 例如文件系统权限。对应于 errno EACCES 和 EPERM。
ProcessLookupError当给定进程不存在时引发。对应于 errno ESRCH。
TimeoutError当系统功能在系统级别超时时引发。对应于 errno ETIMEDOUT。
警告描述:下列异常被用作警告类别
Warning警告类别的基类。
UserWarning用户代码所产生警告的基类。
DeprecationWarning如果所发出的警告是针对其他 Python 开发者的,则以此作为与已弃用特性相关警告的基类。
PendingDeprecationWarning对于已过时并预计在未来弃用,但目前尚未弃用的特性相关警告的基类。
SyntaxWarning与模糊的语法相关的警告的基类。
RuntimeWarning与模糊的运行时行为相关的警告的基类。
FutureWarning如果所发出的警告是针对以 Python 所编写应用的最终用户的,则以此作为与已弃用特性相关警告的基类。
ImportWarning与在模块导入中可能的错误相关的警告的基类。
UnicodeWarning与 Unicode 相关的警告的基类。
EncodingWarning与编码格式相关的警告的基类。
BytesWarning与 bytes 和 bytearray 相关的警告的基类。
ResourceWarning资源使用相关警告的基类。会被默认警告过滤器忽略。 启用 Python 开发模式 时会显示此警告。

参考文档:内置异常 — Python 3.10.6 文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值