Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top