2013-06-13 4 views
17

पर विचार करेंजब मैं प्रतिक्रिया में अपना अपवाद उठाता हूं तो मैं पिछले अपवादों को अधिक आसानी से कैसे दबा सकता हूं?

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

लेकिन यह एक हैक की तरह लगता है। मैं और क्या कर सकता हूँ?

+0

यह मदद कर सकता है http://stackoverflow.com/questions/1319615/proper-way-to-declare-custom-exceptions- इन-आधुनिक-पायथन –

उत्तर

26

पायथन 3.3 और बाद में raise ... from None इस स्थिति में उपयोग किया जा सकता है।

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

इसके वांछित परिणाम हैं।

+0

बस एक ही चीज़ पोस्ट करने वाला था। यह भी देखें [पीईपी 3134] (http://www.python.org/dev/peps/pep-3134/)। – Aya

+1

[पीईपी 40 9] (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...') 
संबंधित मुद्दे

 संबंधित मुद्दे