Come posso verificare la versione di Python in un programma che utilizza nuove funzionalità del linguaggio?

|

Se ho uno script Python che richiede almeno una versione particolare di Python, qual è il modo corretto per non riuscire correttamente quando viene utilizzata una versione precedente di Python per avviare lo script?

Come faccio a ottenere il controllo abbastanza presto da inviare 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 piccola routine di controllo della versione dell'interprete che è la prima cosa che lo script chiamerebbe ... tranne per il fatto che non va così lontano. Invece, lo script fallisce durante la compilazione di Python, prima ancora che le mie routine vengano chiamate. Quindi l'utente dello script vede alcuni traceback di errori synax molto oscuri, che richiedono praticamente a un esperto di dedurre che si tratta semplicemente 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 o versioni successive " else: # errore di sintassi in 2.4, ok in 2.5 x = 1 se True else 2 print x 

Quando eseguito sotto 2.4, voglio questo risultato

$ ~/bin/python2.4 tern.py deve usare python 2.5 o versioni successive 

e non questo risultato:

$ ~/bin/python2 .4 tern.py File "tern.py", riga 5 x = 1 se True else 2 ^ SyntaxError: inva sintassi del coperchio 

(Canale per un collega.)