哈希库/ MD5。与Python 2.4兼容性。

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块的结果定义一个正确的函数。这种解决方案可以吗?

在更一般的情况下,例如:您有两个不同的库,具有相同的目标但不同的接口,并且您想要使用一个库,但是如果找不到第一个库,则回退并使用另一个库,您该如何解决此问题?

2个回答

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 语句非常危险,因为它会隐藏在模块中发现但在模块源代码中引发异常的错误。 - Kenan Banks
谢谢,我现在已经确认过该声明了。 - jkp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接