hashlib / md5. Совместимость с питоном 2.4 - PullRequest
8 голосов
/ 15 сентября 2009

python 2.6 сообщает, что модуль md5 устарел и должен использоваться hashlib. Если я изменю import md5 на import hashlib, я решу для python 2.5 и python 2.6, но не для python 2.4, у которого нет модуля hashlib (что приводит к ImportError, которую я могу поймать).

Теперь, чтобы исправить это, я мог бы сделать попытку / поймать и определить функцию getMd5 (), чтобы надлежащая была определена согласно результату блока try. Это решение хорошо?

Как бы вы решили эту проблему в более общем случае, например: у вас есть две разные библиотеки с одной и той же целью, но с разным интерфейсом, и вы хотите использовать одну, но отступить и использовать другую, если первая один не найден.

Ответы [ 2 ]

18 голосов
/ 15 сентября 2009

В общем, следующая конструкция просто отлично:

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

В вашем конкретном случае, возможно:

try: 
   from hashlib import md5
except ImportError:
   from md5 import md5
2 голосов
/ 15 сентября 2009

В случае, если модули имеют тот же интерфейс, что и здесь, решение, которое вы описали, подойдет. Вы также можете изолировать импорт в свой собственный модуль следующим образом:

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

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

В случае, если они имеют разные интерфейсы, вам нужно написать адаптер для выравнивания интерфейсов, как вы указали.

...