Как я могу более легко подавить предыдущие исключения, когда я выражу свое собственное исключение в ответ?
Рассмотрим
try:
import someProprietaryModule
except ImportError:
raise ImportError('It appears that <someProprietaryModule> is not installed...')
При запуске, если someProprietaryModule не установлен, можно увидеть:
(traceback data)
ImportError: unknown module: someProprietaryModule
During handling of the above exception, another exception occurred:
(traceback data)
ImportError: It appears that <someProprietaryModule> is not installed...
Возможно, я не хочу, чтобы отображалась строка "Во время обработки вышеизложенного исключения..." (и строки над ней). Я мог бы сделать это:
_moduleInstalled = True
try:
import someProprietaryModule
except ImportError:
_moduleInstalled = False
if not _moduleInstalled:
raise ImportError('It appears that <someProprietaryModule> is not installed...')
Но это похоже на взлома. Что еще я могу сделать?
Ответы
Ответ 1
В Python 3.3 и более поздних версиях raise ... from None
можно использовать в этой ситуации.
try:
import someProprietaryModule
except ImportError:
raise ImportError('It appears that <someProprietaryModule> is not installed...') from None
Это дает желаемые результаты.
Ответ 2
Это можно сделать так, как в Python 2.7 и Python 3:
try:
import someProprietaryModule
except ImportError as e:
raised_error = e
if isinstance(raised_error, ImportError):
raise ImportError('It appears that <someProprietaryModule> is not installed...')