2009-09-14 28 views
8

Python 2.6 informuje, że moduł md5 jest przestarzały i należy użyć hashlib. Jeśli zmienię import md5 na import hashlib rozwiążę dla Pythona 2.5 i Pythona 2.6, ale nie dla Pythona 2.4, który nie ma modułu hashlib (prowadzącego do ImportError, który mogę złapać).hashlib/md5. Kompatybilność z Pythonem 2.4

Teraz, aby to naprawić, mógłbym wykonać polecenie try/catch i zdefiniować funkcję getMd5() tak, aby zdefiniować właściwą zgodnie z wynikiem bloku try. Czy to rozwiązanie jest w porządku?

Jak rozwiązać ten problem w bardziej ogólnym przypadku, na przykład: masz dwie różne biblioteki o tym samym celu, ale o innym interfejsie, i chcesz go użyć, ale cofnij się i użyj drugiego, jeśli pierwszego nie znaleziono.

Odpowiedz

18

Na ogół dodaje konstrukcja jest dobrze:

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

W danym przypadku, być może:

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

W przypadku, gdy moduły mają ten sam interfejs, jak to zrobić tutaj, rozwiązanie, które opisałeś, jest w porządku. Można także izolować import do własnego modułu tak:

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

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

W przypadku, gdy mają różne interfejsy, trzeba by napisać adapter, aby wyrównać interfejsy jak podałeś.

+5

Należy zauważyć, że nagi "except" tutaj jest dość niebezpieczny, ponieważ ukryłby błędy w modułach, które zostały znalezione, ale wyrzucił wyjątki w źródle modułu. – Triptych

+0

Dzięki, zakwalifikowałem to oświadczenie. – jkp