2013-06-13 5 views
17

가 실행 응답으로 자체 예외를 발생시킬 때 이전 예외를보다 쉽게 ​​억제 할 수 있습니까? someProprietaryModule가 설치되지 않은 경우

try: 
    import someProprietaryModule 
except ImportError: 
    raise ImportError('It appears that <someProprietaryModule> is not installed...') 

을 고려, 하나보고 :

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

그러나 그것은 조금은 해킹 같은 느낌이 든다. 내가 뭘 더 할까?

+0

이 도움이 될 http://stackoverflow.com/questions/1319615/proper-way-to-declare-custom-exceptions- in-modern-python –

답변

26

이 경우에는 Python 3.3 이상에서 raise ... from None을 사용할 수 있습니다.

try: 
    import someProprietaryModule 
except ImportError: 
    raise ImportError('It appears that <someProprietaryModule> is not installed...') from None 

이렇게하면 원하는 결과를 얻을 수 있습니다.

+0

똑같은 것을 게시하려고하고있었습니다. [PEP3134] (http://www.python.org/dev/peps/pep-3134/)도 참고하십시오. – Aya

+1

[PEP 409] (https://docs.python.org/3.3/whatsnew/3.3.html#pep-409-suppressing-exception-context)는 '보낸 사람 없음'구문에 추가 된 것입니다. –

0

이 파이썬 2.7과 파이썬 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...')