Pregunta

¿Qué método tiene más sentido para importar un módulo en Python que es específico de la versión? Mi caso de uso es que estoy escribiendo código que se implementará en un entorno python 2.3 y en unos meses se actualizará a python 2.5. Esto:

if sys.version_info[:2] >= (2, 5):
    from string import Template
else:
    from our.compat.string import Template

o esto

try:
    from string import Template
except ImportError:
    from our.compat.string import Template

Sé que cualquiera de los casos es igualmente correcto y funciona correctamente, pero ¿cuál es preferible?

¿Fue útil?

Solución

Siempre la segunda forma: nunca se sabe qué diferentes instalaciones de Python se habrán instalado. Template es un caso específico en el que importa menos, pero cuando prueba la capacidad en lugar de las versiones, siempre es más robusto.

Así es como hago que Testoob sea compatible con Python 2.2 - 2.6: intento importar un módulo de diferentes maneras hasta que trabajos. También es relevante para las bibliotecas de terceros.

Aquí hay un caso extremo: admite diferentes opciones para que aparezca ElementTree:

try: import elementtree.ElementTree as ET
except ImportError:
    try: import cElementTree as ET
    except ImportError:
        try: import lxml.etree as ET
        except ImportError:
            import xml.etree.ElementTree as ET # Python 2.5 and up

Otros consejos

Probablemente diría que el segundo sería preferible. A veces, puede instalar un módulo de una versión más nueva de python en una más antigua. Por ejemplo, wsgiref viene con Python 2.5, pero no es raro que se instale en versiones anteriores (creo que funcionará con python 2.3 en adelante).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top