hashlib/md5。与python 2.4的兼容性

hashlib/md5。与python 2.4的兼容性,python,import,md5,backwards-compatibility,hashlib,Python,Import,Md5,Backwards Compatibility,Hashlib,Python2.6报告md5模块已经过时,应该使用hashlib。如果我将import md5更改为import hashlib,我将为Python2.5和Python2.6求解,但不会为Python2.4求解,它没有hashlib模块(导致导入错误,我可以捕获) 现在,为了修复它,我可以执行try/catch,并定义一个getMd5()函数,以便根据try块的结果定义一个合适的函数。这个解决方案行吗 在更一般的情况下,您将如何解决此问题,例如:您有两个不同的库,具有相同的目标但不同的接口,您希

Python2.6报告md5模块已经过时,应该使用hashlib。如果我将
import md5
更改为
import hashlib
,我将为Python2.5和Python2.6求解,但不会为Python2.4求解,它没有hashlib模块(导致导入错误,我可以捕获)

现在,为了修复它,我可以执行try/catch,并定义一个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
....

如果它们有不同的接口,您需要编写一个适配器,以便按照您指定的方式对齐接口。

请注意,此处的裸
except
语句非常危险,因为它会隐藏模块中发现的错误,但会在模块的源代码中引发异常。谢谢,我现在已经对声明进行了限定。