Pergunta

Qual o método que faz mais sentido para importar um módulo em python que é a versão específica? Meu caso de uso é que eu estou escrevendo código que será implantado em um ambiente Python 2.3 e em poucos meses ser atualizado para Python 2.5. Isto:

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

ou este

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

Eu sei que ambos os casos é igualmente correto e funciona corretamente, mas qual é preferível?

Foi útil?

Solução

Sempre o segundo modo - você nunca sabe o que instalações diferentes Python terá instalado. Template é um caso específico em que importa menos, mas quando você testar a capacidade em vez do controle de versão você está sempre mais robusto.

Isso é como eu fazer Testoob apoio Python 2,2-2,6: Eu tento importar um módulo de diferentes maneiras até que trabalho. Também é relevante para bibliotecas de 3rd-party.

Aqui está um caso extremo - apoiar diferentes opções para ElementTree a aparecer:

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

Outras dicas

Eu provavelmente argumentam que o segundo seria preferível. Às vezes, você pode instalar um módulo a partir de uma versão mais recente do python em um mais antigo. Por exemplo, wsgiref vem com Python 2.5, mas não é totalmente incomum para que ele seja instalado em versões mais antigas (eu acho que ele vai trabalhar com Python 2.3 para cima).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top