类具有可定义的函数__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
,而SyntaxError
则继承自exc_type
。
exc_val
此外,在那个TracebackException
类中,有一个exc_value
参数,对应于我们的exc_val
,似乎具有各种属性,如__cause__
,__context__
和其他属性,所有这些属性都在TracebackType
本身中定义。这让我想到该参数本身就是TracebackException
的实例。
exc_tb
Python定义了一个walk_tb函数,它使用exc_tb
作为参数(从docs.python.org手动跟踪),这个对象似乎具有tb_frame
,tb_lineno
和tb_next
属性,可以追溯到typeshed
库中的TracebackType
类。
你有什么想法?
types
模块导入它,不要与typing
模块混淆。 - Gigi Bayte 2Optional[bool]
吗?https://www.python.org/dev/peps/pep-0343/#id38 - Laurenzdef __exit__(self, *exc: List[Any]) -> None:
似乎可以完成工作(Mypy 不再抱怨)。 - starblue