Python内置异常类的继承关系

2019年9月19日 / 13次阅读 / Last Modified 2019年9月19日

程序中的异常处理(捕获异常)增加了软件的健壮性,防止程序因为各种异常而退出,Python语言内置了很丰富的异常类供程序使用,就像内置函数一样,不需要import什么模块,而是直接使用。

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

以上信息来源:https://docs.python.org/3/library/exceptions.html

最基础的是BaseException,其它所有异常类都继承自它。绝大部分异常类,都继承自Exception类,用户自定义异常类也应该继承自它。

关于如何使用这些异常,有一种看法,好像这些异常都不太关自己代码的事情,Python运行期间跑出来这些异常,只是用来辅助程序员定位问题的。其实,我们完全可以深入一步,程序员也可以在自己的代码中使用这些异常,根据自己代码的功能选择不同名称的异常来使用,这样代码会更cool更专业。如果以上异常名称不能满足自己代码的需要,还可以自定义异常类。

设计函数的返回值是一门艺术,对于纯粹的计算过程,可以没有返回值;对于非此即彼的场景,就是True或False;对于有返回值的函数,而且有可能执行会出错,出错后就得不到返回值的场景,用raise语句抛出一个异常,比return一个自定义的标志位,代码的可读性更好。

-- EOF --

本文链接:https://www.pynote.net/archives/1171

相关文章

    留言区

    《Python内置异常类的继承关系》有1条留言

    电子邮件地址不会被公开。 必填项已用*标注

    • 麦新杰

      Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。 [回复]


    前一篇:
    后一篇:

    More

    麦新杰的Python笔记

    Ctrl+D 收藏本页


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top