【发布时间】:2020-03-07 12:51:28
【问题描述】:
类有一个可定义的函数__exit__,允许实现上下文管理器。
它需要所需的参数:
def __exit__(self, exc_type, exc_val, exc_tb):
但我无法找到这些参数是什么及其类型的明确定义。
这是我对它们是什么以及原因的最佳猜测,但我并不完全确定:
def __exit__(self, exc_type: Exception, exc_val: TracebackException, exc_tb: TracebackType):
exc_type
Python 定义了一个TracebackException 类,该类接受一个exc_type 参数,该参数在issubclass 和SyntaxError 的构造函数中上下文使用,由此推断exc_type 确实是某种Exception,@ 987654334@ 继承自。
exc_val
另外,TracebackException 类是一个 exc_value 参数,它与我们的 exc_val 相匹配,它似乎具有各种属性,例如 __cause__、__context__,以及所有在 @987654340 中定义的其他属性@ 本身。这让我觉得参数本身就是TracebackException的一个实例。
exc_tb
Python 定义了一个使用exc_tb 作为参数的walk_tb 函数(从docs.python.org 手动跟踪),并且该对象似乎具有可以跟踪的tb_frame、tb_lineno 和tb_next 属性回到typeshed 库中的TracebackType 类。
想法?
【问题讨论】:
标签: python python-3.x exception with-statement traceback