2009-09-14 23 views
8

python 2.6 segnala che il modulo md5 è obsoleto e che deve essere usato l'hashlib. Se cambio import md5 in import hashlib risolverò per python 2.5 e python 2.6, ma non per python 2.4, che non ha modulo hashlib (che porta ad un ImportError, che posso catturare).hashlib/md5. Compatibilità con Python 2.4

Ora, per risolverlo, potrei fare un try/catch e definire una funzione getMd5() in modo che venga definita una corretta in base al risultato del blocco try. Questa soluzione è ok?

Come risolveresti questo problema in un caso più generale, ad esempio: hai due librerie diverse con lo stesso obiettivo ma un'interfaccia diversa, e vuoi usarne una, ma ripiega e usa l'altra se la il primo non è stato trovato

risposta

18

In generale la seguente costrutto è bene:

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

Nel caso particolare, forse:

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

Nel caso in cui i moduli hanno la stessa interfaccia, come qui, la soluzione che hai descritto va bene. Si potrebbe anche isolare l'importazione nel proprio modulo come questo:

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

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

Nel caso in cui essi hanno diverse interfacce si avrebbe bisogno di scrivere un adattatore per allineare le interfacce, come è stato specificato.

+5

Si noti che un'istruzione 'tranne except 'qui è piuttosto pericolosa, poiché nasconderebbe gli errori nei moduli trovati ma genererebbe eccezioni all'interno dell'origine del modulo. – Triptych

+0

Grazie, ho qualificato la dichiarazione ora. – jkp

Problemi correlati