2009-09-14 23 views
8

python 2.6 informa que el módulo md5 está obsoleto y debe usarse hashlib. Si cambio import md5 a import hashlib, resolveré para python 2.5 y python 2.6, pero no para python 2.4, que no tiene ningún módulo hashlib (lo que lleva a ImportError, que puedo capturar).hashlib/md5. Compatibilidad con python 2.4

Ahora, para solucionarlo, podría intentar/capturar y definir una función getMd5() para que se defina una adecuada de acuerdo con el resultado del bloque try. ¿Esta solución está bien?

Cómo resolvería este problema en un caso más general, como, por ejemplo: tiene dos bibliotecas diferentes con el mismo objetivo pero diferente interfaz, y desea usar una, pero retroceda y use la otra si el el primero no se encuentra.

Respuesta

18

En general, la construcción siguiente es muy bien:

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

En su caso particular, tal vez:

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

En el caso en que los módulos tienen la misma interfaz, como lo hacen aquí, la solución que describes está bien. También podría aislar a la importación en su propio módulo de la siguiente manera:

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

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

En el caso en el que tienen diferentes interfaces que tendría que escribir un adaptador para alinear las interfaces como se ha especificado.

+5

Tenga en cuenta que una instrucción desnuda 'except' aquí es bastante peligrosa, ya que podría ocultar errores en los módulos que se encuentran pero arrojar excepciones dentro de la fuente del módulo. – Triptych

+0

Gracias, califiqué la declaración ahora. – jkp

Cuestiones relacionadas