2015-09-05 5 views
8

यह अजगर 2.7 बताने के लिए केवल एक समारोह परिभाषा पार्स करने के लिए करता है, तो एक पैकेज मौजूद है संभव है?पायथन: एक समारोह को परिभाषित करता है, तो केवल पैकेज मौजूद है

मैं एक स्क्रिप्ट है कि कई मशीनों पर चलाया जाता है की है। स्क्रिप्ट में परिभाषित कुछ फ़ंक्शन हैं जो बहुत अच्छे हैं, लेकिन स्क्रिप्ट के मूल संचालन के लिए आवश्यक नहीं हैं। स्क्रिप्ट पर चलने वाली कुछ मशीनों में फ़ंक्शन आयात करने वाले पैकेज नहीं होते हैं, (और पैकेज उन पर स्थापित नहीं किया जा सकता है)। वर्तमान में मुझे उन मशीनों पर रेपो क्लोन करने से पहले फ़ंक्शन परिभाषा पर टिप्पणी करना है। एक और समाधान दो अलग-अलग शाखाओं को बनाए रखना होगा, लेकिन यह और भी कठिन है। क्या कोई ऐसा समाधान है जो हमें धक्का देने से पहले कोड को लगातार टिप्पणी करने से रोकता है?

try: 
    someFunction() 
except NameError: 
    print("someFunction() not found.") 
+0

क्यों आप कार्यशील परिभाषाएँ बाहर टिप्पणी करने की जरूरत है? यदि कार्यों की आवश्यकता नहीं है, लेकिन आप उन्हें वैसे भी परिभाषित करते हैं, क्या यह वास्तव में एक समस्या है? – jme

उत्तर

9

समारोह परिभाषा और उसे वैसे ही आयात अजगर में कोड हैं, और अन्य कोड की तरह है, तो आप उन्हें एक try में लपेट कर सकते हैं::

वहां पहले से ही इस जैसे जब समारोह कहा जाता है के लिए समाधान कर रहे हैं

try: 
    import bandana 
except ImportError: 
    pass # Hat-wearing functions are optional 
else: 
    def wear(hat): 
     bandana.check(hat) 
     ... 

यह wear समारोह केवल तभी bandana मॉड्यूल उपलब्ध है परिभाषित करेगा।

यह एक अच्छा विचार है या नहीं चाहे आप पर निर्भर है - मुझे लगता है कि अपनी खुद की स्क्रिप्ट में ठीक होगा, लेकिन आप कोड अन्य लोगों का उपयोग करेगा में यह करने के लिए नहीं चाहते हो सकता है। एक और विचार इस तरह कुछ करने के लिए हो सकता है:

def wear(hat): 
    try: 
     import bandana 
    except ImportError: 
     raise NotImplementedError("You need the bandana package to wear hats") 
    else: 
     bandana.check(hat) 
     ... 

यह यह स्पष्ट कारण है कि आप wear समारोह उपयोग नहीं कर सकते हो जाएगा।

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