Как я могу более легко подавить предыдущие исключения, когда я выражу свое собственное исключение в ответ?

Рассмотрим

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...')