Классы имеют определяемую функцию __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_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
, которые можно проследить до класса TracebackType
в typeshed
библиотека.
Мысли?