Se eu tenho um script Python que requer pelo menos uma versão específica do Python, qual é a maneira correta de falhar normalmente quando uma versão anterior do Python é usada para iniciar o script?
Como obtenho controle cedo o suficiente para emitir uma mensagem de erro e sair?
Por exemplo, eu tenho um programa que usa o operador ternery (novo no 2.5) e blocos "com" (novo no 2.6). Eu escrevi uma rotina simples de verificação de versão para intérpretes, que é a primeira coisa que o script chamaria ... exceto que não chega tão longe. Em vez disso, o script falha durante a compilação do python, antes mesmo de minhas rotinas serem chamadas. Assim, o usuário do script vê alguns rastreamentos de erros de sinaxia muito obscuros - o que exige que um especialista deduza que é simplesmente o caso de executar a versão errada do Python.
Eu sei como verificar a versão do Python. O problema é que algumas sintaxes são ilegais nas versões mais antigas do 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
Quando executado sob 2.4, quero esse resultado
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
e não este resultado:
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(Canalizando para um colega de trabalho.)