Есть ли способ получить доступ к вложенным или повторно поднятым исключениям в python?

Общий шаблон в python заключается в том, чтобы поймать ошибку в восходящем модуле и повторно поднять эту ошибку как нечто более полезное.

try: config_file = open('config.ini', 'r') except IOError: raise ConfigError('Give me my config, user!') 

Это создаст трассировку стека формы

 Traceback (most recent call last): File "<stdin>", line 4, in <module> __main__.ConfigError: Give me my config, user! 

Есть ли способ получить доступ к обернутому исключению, чтобы генерировать трассировку стека больше?

 Traceback (most recent call last): File "<stdin>", line 2, in <module> __builtin__.IOError: File Does not exist. Exception wrapped by: File "<stdin>", line 4, in <module> __main__.ConfigError: Give me my config, user! 

РЕДАКТИРОВАТЬ:

Проблема, которую я пытаюсь победить, заключается в том, что какой-то сторонний код может обернуть исключения до 3 раз, и я хочу иметь возможность определить основную причину, то есть общий способ проверки стека исключений и определить основную причину исключения без необходимости добавлять дополнительный код в сторонние модули.

2 Solutions collect form web for “Есть ли способ получить доступ к вложенным или повторно поднятым исключениям в python?”

Это известно как цепочка исключений и поддерживается в Python 3.

PEP 3134: http://www.python.org/dev/peps/pep-3134/

В Python 2 старое исключение теряется при создании нового, если вы не сохраните его в блоке except .

Используйте модуль traceback . Это позволит вам получить доступ к самой последней трассировке и сохранить ее в строке. Например,

 import traceback try: config_file = open('config.ini', 'r') except OSError: tb = traceback.format_exc() raise ConfigError('Give me my config, user!',tb) 

«Вложенная» трассировка будет сохранена в tb и передана в ConfigError, где вы можете работать с ней, как хотите.

  • Можно ли отслеживать все функции / методы, выполняемые в скрипте python?
  • Как получить выражение вызова при трассировке функции Python?
  • трассировка показывается до декоратора
  • Как я могу регистрировать текущую строку и информацию о стеке с помощью Python?
  • Получить полную трассу
  • Как я могу форматировать стеки стека исключения в протоколе Python?
  • Импорт трассировки Python
  • Функции трассировки, вызываемые в строках Python
  • Python - лучший язык программирования в мире.