如何打印 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 模块打印层次结构中的异常错误。