8

python 2.6 报告 md5 模块已过时,应使用 hashlib。如果我import md5改为import hashlib我将解决 python 2.5 和 python 2.6,但不是 python 2.4,它没有 hashlib 模块(导致 ImportError,我可以捕获)。

现在,要修复它,我可以做一个 try/catch,并定义一个 getMd5() 函数,以便根据 try 块的结果定义一个正确的函数。这个解决方案好吗?

在更一般的情况下,您将如何解决此问题,例如:您有两个具有相同目标但界面不同的不同库,并且您想使用一个,但如果第一个不是,则退回并使用另一个成立。

4

2 回答 2

18

一般来说,以下构造就可以了:

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

在您的特定情况下,也许:

try: 
   from hashlib import md5
except ImportError:
   from md5 import md5
于 2009-09-14T20:54:25.450 回答
2

在模块具有相同接口的情况下,就像它们在这里所做的那样,您描述的解决方案很好。您还可以像这样将导入隔离到自己的模块中:

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

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

在它们具有不同接口的情况下,您需要编写一个适配器来按照您指定的方式对齐接口。

于 2009-09-14T20:57:09.777 回答