2008-12-04 15 views
13

Która metoda ma największy sens w przypadku importowania modułu do pythona, który jest specyficzny dla wersji? Moim przypadkiem użycia jest to, że piszę kod, który zostanie wdrożony w środowisku Pythona 2.3, a za kilka miesięcy zostanie zaktualizowany do Pythona 2.5. To:Najlepszy sposób importowania specyficznych dla wersji modułów pythonowych

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

czy to

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

wiem, że albo sprawa jest równie poprawne i działa poprawnie, ale które z nich jest lepsze?

Odpowiedz

27

Zawsze drugi sposób - nigdy nie wiesz, jakie różne instalacje Pythona będą zainstalowane. Template to szczególny przypadek, w którym ma mniejsze znaczenie, ale kiedy testujesz możliwości zamiast wersji, zawsze jesteś bardziej solidny.

W ten sposób wykonuję obsługę Testoob Python 2.2 - 2.6: Próbuję zaimportować moduł na różne sposoby, dopóki nie zadziała. Dotyczy to również bibliotek zewnętrznych.

Oto skrajny przypadek - wspieranie różnych opcji dla ElementTree pojawić:

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 
+0

tęskniłeś 'od importu xml.etree cElementTree jak ET' dla Pythona 2.5 i aż – jfs

+0

masz rację :) – orip

2

Prawdopodobnie będę twierdził, że drugi byłby lepszy. Czasami możesz zainstalować moduł z nowszej wersji Pythona na starszy. Na przykład, wsgiref jest dostarczany z Pythonem 2.5, ale nie jest całkiem niezbyt często instalowany w starszych wersjach (myślę, że będzie działał z pythonem 2.3).

Powiązane problemy