Jeśli mam skrypt w języku Python, który wymaga co najmniej konkretnej wersji języka Python, jaki jest prawidłowy sposób, by upaść z wdziękiem, gdy do uruchomienia skryptu używana jest wcześniejsza wersja języka Python?
Jak uzyskać kontrolę wystarczająco wcześnie, aby wysłać komunikat o błędzie i wyjść?
Na przykład mam program, który używa operatora ternery (nowy w wersji 2.5) i „z” blokami (nowy w wersji 2.6). Napisałem prostą, małą procedurę sprawdzania wersji interpretera, która jest pierwszą rzeczą, którą skrypt mógłby wywołać ... tyle że nie zaszła tak daleko. Zamiast tego skrypt nie działa podczas kompilacji Pythona, zanim moje procedury zostaną nawet wywołane. W związku z tym użytkownik skryptu widzi pewne bardzo niejasne mechanizmy śledzenia błędów syx - które w zasadzie wymagają od eksperta wywnioskowania, że po prostu chodzi o uruchomienie niewłaściwej wersji Pythona.
Wiem, jak sprawdzić wersję Pythona. Problem polega na tym, że niektóre składnie są nielegalne w starszych wersjach Pythona. Rozważ ten program:
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
Gdy działa poniżej 2.4, chcę ten wynik
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
a nie ten wynik:
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(Kanalizacja dla współpracownika.)