2012-01-16 13 views
7

आयात कर रहा है यह मेरा फ़ाइल संरचना है:एक वैकल्पिक मॉड्यूल

[mylibrary] 
    __init__.py 

    [codecs] 
     __init__.py < this is the file that we're talking about 
     optional.py 

अब मैं चिह्नित __init__.py में इस कोड है:

def load_optional_codecs(): 
    try: 
     from mylibrary.codecs import optional 
     # do stuff with optional 
    except ImportError: 
     pass 

इस के साथ एक समस्या है। यदि optional मॉड्यूल में एक आयात अपवाद होता है तो यह चुपचाप विफल हो जाएगा। मॉड्यूल से किसी भी अपवाद को शांत किए बिना वैकल्पिक मॉड्यूल आयात करने का कोई तरीका है?


यह एक अस्पष्ट परिदृश्य की तरह लग सकता है लेकिन मैं खामोश अपवाद की वजह से एक बुरा त्रुटि मिल गया है और मैं भविष्य में ऐसा होने से रोकने के लिए चाहते हैं।

+0

आप उपयोगकर्ता को अपवाद की रिपोर्ट कर सकते हैं या 'को छोड़कर' ब्लॉक में 'पास' के बजाय इसे लॉग कर सकते हैं, लेकिन यदि आयात विफल होने से ग़लत त्रुटियां उत्पन्न होती हैं, तो मैं कहूंगा कि यह लगभग निश्चित रूप से "वैकल्पिक" नहीं है। – geoffspear

+0

@Wooble: नहीं, 'mylibrary.codecs आयात वैकल्पिक' से विफल नहीं हुआ। समस्या यह थी कि 'वैकल्पिक' मॉड्यूल ने एक मॉड्यूल आयात किया जो असफल रहा (प्रोग्रामिंग त्रुटि के कारण), लेकिन उस त्रुटि को चुप कर दिया गया। – orlp

उत्तर

7

इसमें कुछ समय hacky है, लेकिन आप अपवाद पर संदेश की जाँच निर्धारित करने के लिए क्या विफल रही है हो सकता है:

try: 
    from mylibrary.codecs import optional 
except ImportError, e: 
    if e.message != 'No module named optional': 
     raise 

इस कोड के साथ, अगर वैकल्पिक मॉड्यूल आयात करने में विफल रहता है, यह नजरअंदाज कर दिया है, लेकिन अगर कुछ और एक अपवाद उठाता है (एक और मॉड्यूल, वाक्यविन्यास त्रुटियों, आदि आयात), यह उठाया जाएगा।

+0

ओह हा, यह सुंदर निफ्टी है। यदि कोई विकल्प पॉप अप नहीं करता है तो मुझे लगता है कि मैं इसका उपयोग करूंगा। – orlp

+0

भाषा डिज़ाइनर ने एक विशेषता ई जोड़ा है तो एक विकल्प होगा। जी। 'मॉड्यूल' 'आयात त्रुटि' के लिए। लेकिन उन्होंने नहीं किया, इसलिए यह एक सबसे व्यवहार्य तरीका प्रतीत होता है। – glglgl

+3

@glglgl 'पार्सिंग एरर (' का टैग शुरू नहीं हुआ')' – PascalVKooten

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