Which method makes the most sense for importing a module in python that is version specific? My use case is that I'm writing code that will be deployed into a python 2.3 environment and in a few months be upgraded to python 2.5. This:
if sys.version_info[:2] >= (2, 5):
from string import Template
else:
from our.compat.string import Template
or this
try:
from string import Template
except ImportError:
from our.compat.string import Template
I know that either case is equally correct and works correctly but which one is preferable?
Always the second way - you never know what different Python installations will have installed. Template
is a specific case where it matters less, but when you test for the capability instead of the versioning you're always more robust.
That's how I make Testoob support Python 2.2 - 2.6: I try to import a module in different ways until it works. It's also relevant to 3rd-party libraries.
Here's an extreme case - supporting different options for ElementTree to appear:
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