Domanda

Quale metodo ha più senso per importare un modulo in Python specifico per la versione? Il mio caso d'uso è che sto scrivendo codice che verrà distribuito in un ambiente Python 2.3 e in pochi mesi verrà aggiornato a Python 2.5. Questo:

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

o questo

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

So che entrambi i casi sono ugualmente corretti e funzionano correttamente, ma quale è preferibile?

È stato utile?

Soluzione

Sempre il secondo modo: non si sa mai quali diverse installazioni Python avranno installato. Template è un caso specifico in cui conta meno, ma quando si verifica la funzionalità anziché il controllo delle versioni si è sempre più affidabili.

Ecco come faccio a Testoob supportare Python 2.2 - 2.6: cerco di importare un modulo in diversi modi fino a quando non lavori. È rilevante anche per le librerie di terze parti.

Ecco un caso estremo: supportare diverse opzioni per la visualizzazione di 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

Altri suggerimenti

Probabilmente direi che il secondo sarebbe preferibile. A volte, puoi installare un modulo da una versione più recente di Python in una versione precedente. Ad esempio, wsgiref viene fornito con Python 2.5, ma non è del tutto insolito che venga installato in versioni precedenti (penso che funzionerà con Python 2.3 in poi).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top