类有一个可定义的函数__exit__
,可以实现上下文管理器.
它采用所需的参数:
def __exit__(self, exc_型, exc_val, exc_tb):
但我找不到关于这些论点是什么及其类型的明确定义.
以下是我对它们是什么以及为什么的最佳猜测,但我不完全确定:
def __exit__(self, exc_型: Exception, exc_val: TracebackException, exc_tb: TracebackType):
exc_型
Python定义了一个TracebackException
类,该类接受exc_型
参数,该参数在issubclass
和SyntaxError
中的构造函数中上下文使用,从而推断exc_型
实际上是Exception
的某种类型,SyntaxError
继承自Exception
.
exc_val
另外,在TracebackException
类中有一个exc_value
参数,它与exc_val
匹配,exc_val
似乎有各种属性,比如__cause__
、__context__
,以及TracebackType
本身定义的其他属性.这让我觉得这个参数本身就是TracebackException
的一个实例.
exc_tb
Python定义了一个walk_tb函数,它使用exc_tb
作为参数(从docs.python.org手动跟踪),这个对象似乎有tb_frame
、tb_lineno
和tb_next
个属性,这些属性可以追溯到typeshed
库中的TracebackType
类.
思想?