2009-09-14 19 views
8

पायथन 2.6 के साथ संगतता रिपोर्ट करता है कि md5 मॉड्यूल अप्रचलित है और हैशिलिब का उपयोग किया जाना चाहिए। अगर मैं import md5 से import hashlib बदलता हूं तो मैं अजगर 2.5 और पायथन 2.6 के लिए हल करूंगा, लेकिन पायथन 2.4 के लिए नहीं, जिसमें कोई हैशिलिब मॉड्यूल नहीं है (जो आयातकर है, जिसे मैं पकड़ सकता हूं)।हैशिलब/एमडी 5। पायथन 2.4

अब, इसे ठीक करने के लिए, मैं कोशिश/पकड़ कर सकता हूं, और getMd5() फ़ंक्शन को परिभाषित कर सकता हूं ताकि एक उचित प्रयास को ब्लॉक ब्लॉक के परिणाम के अनुसार परिभाषित किया जा सके। क्या यह समाधान ठीक है?

आप इस मुद्दे को एक सामान्य मामले में कैसे हल करेंगे, उदाहरण के लिए: आपके पास एक ही उद्देश्य के साथ दो अलग-अलग पुस्तकालय हैं लेकिन अलग-अलग इंटरफेस हैं, और आप एक का उपयोग करना चाहते हैं, लेकिन वापस गिरें और दूसरे का उपयोग करें पहला नहीं मिला है। शायद,

try: 
    import module 
except ImportError: 
    # Do something else. 

अपने विशेष मामले में:

उत्तर

18

सामान्य में निम्नलिखित निर्माण ठीक है

try: 
    from hashlib import md5 
except ImportError: 
    from md5 import md5 
2

मामले में जहां मॉड्यूल एक ही इंटरफ़ेस है, के रूप में वे यहाँ कर में, आपके द्वारा वर्णित समाधान ठीक है। इस मामले में जहां वे विभिन्न इंटरफेस आप के रूप में आपके द्वारा निर्दिष्ट इंटरफेस संरेखित करने के लिए एक एडाप्टर लिखने के लिए की आवश्यकता होगी है में

hash.py 
---- 
try: 
    import hashlib.md5 as md5mod 
except ImportError: 
    import md5 as md5mod 

----- 
prog.py 
----- 
from hash import md5mod 
.... 

: आप भी इस तरह अपने स्वयं के मॉड्यूल में आयात को अलग कर सकते हैं।

+5

ध्यान दें कि यहां एक नग्न 'छोड़कर' कथन बहुत खतरनाक है, क्योंकि यह मॉड्यूल के स्रोतों में त्रुटियों को छुपाएगा लेकिन मॉड्यूल के स्रोत के भीतर अपवाद फेंक देगा। – Triptych

+0

धन्यवाद, मैंने अभी कथन योग्यता प्राप्त की है। – jkp

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