python内置的退出参数类型是什么?
类有一个可定义的函数python内置的退出参数类型是什么?,python,python-3.x,exception,with-statement,traceback,Python,Python 3.x,Exception,With Statement,Traceback,类有一个可定义的函数\uuuuu exit\uuuu,该函数允许实现上下文管理器 它接受所需的参数: def __exit__(self, exc_type, exc_val, exc_tb): 但我找不到关于这些论点是什么及其类型的明确定义 以下是我对它们是什么以及为什么的最佳猜测,但我不完全确定: def __exit__(self, exc_type: Exception, exc_val: TracebackException, exc_tb: TracebackType): exc
\uuuuu exit\uuuu
,该函数允许实现上下文管理器
它接受所需的参数:
def __exit__(self, exc_type, exc_val, exc_tb):
但我找不到关于这些论点是什么及其类型的明确定义
以下是我对它们是什么以及为什么的最佳猜测,但我不完全确定:
def __exit__(self, exc_type: Exception, exc_val: TracebackException, exc_tb: TracebackType):
exc_型
Python定义了一个TracebackException
类,该类接受一个exc_类型
参数,该参数在与SyntaxError
的构造函数中上下文使用,从而推断exc_类型
确实是某种异常
,它继承自
exc_val
另外,在TracebackException
类中有一个exc_值
参数,它与exc_val
匹配,它似乎具有各种属性,如原因
,上下文
,以及所有在TracebackType
本身中定义的其他属性。这使我认为该参数本身就是TracebackException
的一个实例
exc_tb
Python定义了一个使用exc\u tb
作为参数(手动跟踪)的函数,该对象似乎具有tb\u frame
、tb\u lineno
和tb\u next
属性,这些属性可以追溯到库中的TracebackType
类
想法?
exc_类型
是异常的类<代码>exc_val是异常实例exc_tb
是一个回溯对象,其中有一个引用
一般来说,情况应该是
类型(exc_val)是exc_类型
exc\u val.\uu回溯是exc\u tb
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
那么它的正确注释应该如下所示:
def __exit__(self, exctype: Optional[Type[BaseException]],
excinst: Optional[BaseException],
exctb: Optional[TracebackType]) -> bool: ...
您可能想知道为什么这个API有三个参数,而其中两个参数可以从异常实例本身轻松确定。但情况并非总是这样,在较旧版本的Python中,可以将字符串作为异常引发,而异常的\uuuu traceback\uuu
属性不存在。您仍然可以在Python 2.7(!)中将旧式类作为例外提出。从何处导入TrackbackType?@Mentos1386从类型
模块导入,不要与类型
模块混淆。exit的返回类型注释是否应该是可选[bool]
@Laurenz typeshed使用bool,我想返回None而不是False并没有实际区别,但它只是因为duck类型而起作用。