2013-12-08 6 views
5

कहें कि हम user.py नामक एक स्क्रिप्ट आयात करना चाहते हैं, जो असफल हो सकता है।किसी आयातक को गैर-पुनरावर्ती कैसे पकड़ें?

try: 
    import user 
except ImportError: 
    logging.info('No user script loaded.') 

कैसे हम केवल करने के लिए सुनिश्चित कर सकते हैं user.py के ही संभव आयात विफलता को पकड़ने, और आयात कि user.py में शामिल किया जा सकता की नहीं?

+0

यह संबंधित पोस्ट 'पायथन 3.3' के लिए एक अच्छा समाधान प्रदान करता है जो गतिशील आयात के लिए भी काम करता है: http://stackoverflow.com/questions/28798208/how-to-catch-an-importerror-non-recursively- गतिशील -इम्पोर्ट –

उत्तर

1

यदि वर्तमान ट्रैस बैक ट्रेस बैक की एक श्रृंखला का हिस्सा है देखने के लिए जाँच कर सकते हैं।

1

आप तर्क पर दे सकता है:

try: 
    import user 
except ImportError as exception: 
    if 'user' == exception.args[0][16:]: 
     logging.info('No user script loaded.') 

यह आपको केवल उस संदेश प्रवेश करेंगे जब उपयोगकर्ता स्क्रिप्ट आयात करने के लिए विफल रहता है सुनिश्चित करता है।

है, यह तर्क दिया जा सकता user में आयात में से एक आयात करने में नाकाम रहने भी संकेत मिलता है कि यह है कि यह user आयात नहीं कर सकते (तुम वैसे भी संदेश लॉग इन करने की आवश्यकता होगी, जिसका मतलब है)।

import sys 

try: 
    import user 
except ImportError: 
    if sys.exc_info()[2].tb_next: 
     raise 

    logging.info('No user script loaded.') 

यदि वहाँ user में एक ImportError, sys.exc_info()[2].tb_next यह की ओर इशारा करेगा:

+1

यह दृष्टिकोण थोड़ा नाजुक है, क्योंकि यह 'No_user नामक कोई मॉड्यूल' के लिए झूठी सकारात्मक नहीं उठाएगा। – Blender

+0

@ ब्लेंडर मैंने इसे अपडेट किया है ताकि मॉड्यूल नाम को 'उपयोगकर्ता' से बिल्कुल मिलान करने की आवश्यकता हो। इसके अलावा मैं सहमत हूं कि यह नाजुक है कि लाइन 2 और लाइन 4 में एक ही मॉड्यूल नाम होना आवश्यक है। –

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