Si j'ai un script Python qui nécessite au moins une version particulière de Python, quelle est la bonne façon d'échouer correctement lorsqu'une version antérieure de Python est utilisée pour lancer le script?
Comment obtenir le contrôle suffisamment tôt pour émettre un message d'erreur et quitter?
Par exemple, j'ai un programme qui utilise l'opérateur de ternerie (nouveau en 2.5) et des blocs "avec" (nouveau en 2.6). J'ai écrit une petite routine simple de vérificateur de version d'interpréteur qui est la première chose que le script appellerait ... sauf qu'il ne va pas aussi loin. Au lieu de cela, le script échoue pendant la compilation de python, avant même que mes routines soient appelées. Ainsi, l'utilisateur du script voit des traces d'erreurs de synchronisation très obscures - qui nécessitent à peu près un expert pour déduire qu'il s'agit simplement d'exécuter la mauvaise version de Python.
Je sais comment vérifier la version de Python. Le problème est qu'une syntaxe est illégale dans les anciennes versions de Python. Considérez ce programme:
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
Lorsque exécuté sous 2.4, je veux ce résultat
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
et non ce résultat:
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(Canalisation pour un collègue.)