Если у меня есть сценарий Python, для которого требуется хотя бы определенная версия Python, как правильно выполнить корректный сбой при использовании более ранней версии Python для запуска сценария?
Как получить контроль достаточно рано, чтобы выдать сообщение об ошибке и выйти?
Например, у меня есть программа, которая использует оператор ternery (новый в 2.5) и блоки «with» (новый в 2.6). Я написал простую небольшую подпрограмму проверки версии интерпретатора, которая является первой вещью, которую вызовет сценарий ... за исключением того, что она не зашла так далеко. Вместо этого сценарий завершается ошибкой во время компиляции Python, прежде чем мои процедуры будут даже вызваны. Таким образом, пользователь сценария видит некоторые очень неясные трассировки ошибок Synax, которые в значительной степени требуют от эксперта, чтобы сделать вывод, что это просто случай запуска неправильной версии Python.
Я знаю, как проверить версию Python. Проблема в том, что какой-то синтаксис недопустим в старых версиях Python. Рассмотрим эту программу:
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
При запуске под 2.4, я хочу этот результат
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
а не этот результат
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(Ченнелинг для коллеги.)