Se ho uno script Python che richiede almeno una versione particolare di Python, qual è il modo corretto di fallire con grazia quando una versione precedente di Python viene utilizzata per avviare lo script?
Come posso ottenere il controllo abbastanza presto per emettere un messaggio di errore ed uscire?
Ad esempio, ho un programma che utilizza l'operatore ternery (nuovo in 2.5) e i blocchi "con" (nuovo in 2.6). Ho scritto una semplice routine di verifica della versione dell'interprete che è la prima cosa che lo script chiamerebbe ... tranne che non va così lontano. Invece, lo script fallisce durante la compilazione di Python, prima ancora che vengano chiamate le mie routine. Quindi l'utente dello script vede alcune tracce di errori di sinossi molto oscure - che praticamente richiedono un esperto per dedurre che è semplicemente il caso di eseguire la versione sbagliata di Python.
So come controllare la versione di Python. Il problema è che alcune sintassi sono illegali nelle versioni precedenti di Python. Considera questo programma:
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
Quando eseguito sotto 2.4, voglio questo risultato
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
e non questo risultato:
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(Canalizzazione per un collega.)