2009-09-14 3 views
8

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

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

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

ответ

18

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

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

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

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

Обратите внимание, что голый оператор 'except' здесь довольно опасен, поскольку он скрывает ошибки в найденных модулях, но исключает исключения в источнике модуля. – Triptych

+0

Спасибо, я уже квалифицировал заявление. – jkp

Смежные вопросы