如何打印 Python 异常/错误层次结构?


在学习如何打印 Python 异常之前,我们将了解什么是异常。

当程序无法按照预期执行时,就会发生异常。当发生意外错误或事件时,Python 会抛出异常。

异常通常既有效也无效。可以通过多种方式在程序中通过异常来管理错误和异常情况。当您怀疑代码可能会产生错误时,可以使用异常处理技术。这可以防止软件崩溃。

常见异常

  • IOError(输入输出错误)− 当文件无法打开时

  • ImportError− 当 Python 找不到模块时

  • ValueError− 当用户按下中断键(通常是 ctrl+c 或 delete)时发生

  • EOFError(文件结束错误)− 当 input() 或 raw_input() 在没有读取任何数据的情况下遇到文件结束 (EOF) 条件时导致。

Python 异常/错误层次结构

Python 异常层次结构由各种内置异常组成。此层次结构用于处理各种类型的异常,因为继承的概念也出现在其中。

在 Python 中,所有内置异常必须是派生自 BaseException 的类的实例。

可以通过导入 Python 的 inspect 模块来打印此异常或错误层次结构。使用 inspect 模块,可以执行类型检查,检索方法的源代码,检查类和函数,以及检查解释器堆栈。

在本例中,可以使用 inspect 模块中的 getclasstree() 函数来构建树形层次结构。

语法

inspect.getclasstree(classes, unique = False)

示例

可以使用 inspect.getclasstree() 来排列嵌套类列表的层次结构。在嵌套列表出现的地方,派生自紧随其后的类的类也将出现。

# Inbuilt exceptions: # Import the inspect module import inspect as ipt def tree_class(cls, ind = 0): print ('-' * ind, cls.__name__) for K in cls.__subclasses__(): tree_class(K, ind + 3) print ("Inbuilt exceptions is: ") # THE inspect.getmro() will return the tuple. # of class which is cls's base classes. #The next step is to create a tree hierarchy. ipt.getclasstree(ipt.getmro(BaseException)) # function call tree_class(BaseException)

输出

在此示例中,我们仅打印了 BaseException 的层次结构;要打印其他异常的层次结构,请将“Exception”作为参数传递给函数。

Inbuilt exceptions is:
BaseException
--- Exception
------ TypeError
------ StopAsyncIteration
------ StopIteration
------ ImportError
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
------ TokenError
------ StopTokenizing
------ ClassFoundException
------ EndOfBlock
--- GeneratorExit
--- SystemExit
--- KeyboardInterrupt

示例

另一个用于显示 Python 异常/错误层次结构的示例如下所示。在这里,我们试图使用“Exception”显示其他异常的层次结构 -

import inspect print("The class hierarchy for built-in exceptions is:") inspect.getclasstree(inspect.getmro(Exception)) def classtree(cls, indent=0): print('.' * indent, cls.__name__) for subcls in cls.__subclasses__(): classtree(subcls, indent + 3) classtree(Exception))

输出

输出如下所示 -

The class hierarchy for built-in exceptions is:
Exception
... TypeError
... StopAsyncIteration
... StopIteration
... ImportError
...... ModuleNotFoundError
...... ZipImportError
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
... Verbose
... TokenError
... StopTokenizing
... EndOfBlock

结论

通过本文,我们学习了如何使用 Python 的 inspect 模块打印层次结构中的异常错误。

更新于: 2023年2月24日

3K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告