La mejor manera de importar módulos de Python específicos de versión

¿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 un código que se implementará en un entorno python 2.3 y en unos meses se actualizará a python 2.5. Esta:

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 dos casos es igual de correcto y funciona correctamente, pero ¿cuál es preferible?

Siempre de la segunda forma: nunca se sabe qué instalaciones de Python se instalarán. Template es un caso específico en el que importa menos, pero cuando prueba la capacidad en lugar del control de versiones, siempre es más sólido.

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

Este es 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 

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 del todo inusual que se instale en versiones anteriores (creo que funcionará con Python 2.3 arriba).