Si tengo un script de Python que requiere al menos una versión particular de Python, ¿cuál es la forma correcta de fallar con gracia cuando se usa una versión anterior de Python para iniciar el script?
¿Cómo obtengo el control lo suficientemente temprano como para emitir un mensaje de error y salir?
Por ejemplo, tengo un programa que usa el operador ternery (nuevo en 2.5) y bloques "con" (nuevo en 2.6). Escribí una pequeña rutina de verificación de versión de intérprete que es lo primero que llamaría el script ... excepto que no llega tan lejos. En cambio, el script falla durante la compilación de Python, incluso antes de que se llame a mis rutinas. Por lo tanto, el usuario del script ve algunos rastreos de error de sinax muy oscuros, que requieren que un experto deduzca que es simplemente el caso de ejecutar la versión incorrecta de Python.
Sé cómo verificar la versión de Python. El problema es que cierta sintaxis es ilegal en versiones anteriores de Python. Considere este programa:
import sys
if sys.version_info < (2, 4):
raise "must use python 2.5 or greater"
else:
# syntax error in 2.4, ok in 2.5
x = 1 if True else 2
print x
Cuando se ejecuta por debajo de 2.4, quiero este resultado
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
y no este resultado:
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(Canalizando para un compañero de trabajo).