Трассировка Python 3 завершается сбоем, если исключение не активно

Я заметил, что в Python2, когда я пытаюсь вывести трассировку стека исключений, но активного исключения нет, он печатает None:

Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 
>>> import traceback
>>> traceback.print_exc()
None

Но Python3 терпит неудачу из-за какой-то внутренней проблемы:

Python 3.2.2 (default, Sep  5 2011, 21:17:14) 
>>> import traceback
>>> traceback.print_exc()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.2/traceback.py", line 259, in print_exc
    print_exception(etype, value, tb, limit, file, chain)
  File "/usr/lib/python3.2/traceback.py", line 155, in print_exception
    for value, tb in values:
  File "/usr/lib/python3.2/traceback.py", line 122, in _iter_chain
    cause = exc.__cause__
AttributeError: 'NoneType' object has no attribute '__cause__'

Это ошибка в Python, или я всегда должен проверять какое-то условие перед вызовом print_exc()


person Giovanni Funchal    schedule 22.02.2012    source источник


Ответы (1)


Это ошибка. Может быть решено, что должна возникнуть ошибка, но это определенно неправильная ошибка.

person Lennart Regebro    schedule 23.02.2012
comment
Привет, большое спасибо. Знаете ли вы, как я могу проверить, активно ли исключение, перед вызовом print_exc() в качестве обходного пути? - person Giovanni Funchal; 23.02.2012
comment
sys.exc_info() вернет (None, None, None), если нет активного исключения. Это то, что использует print_exc(). - person Lennart Regebro; 23.02.2012