Wenn ich ein Python-Skript habe, für das mindestens eine bestimmte Version von Python erforderlich ist, wie kann ich dann ordnungsgemäß fehlschlagen, wenn eine frühere Version von Python zum Starten des Skripts verwendet wird?
Wie erhalte ich früh genug die Kontrolle, um eine Fehlermeldung auszugeben und zu beenden?
Zum Beispiel habe ich ein Programm, das den ternery-Operator (neu in 2.5) und "with" -Blöcke (neu in 2.6) verwendet. Ich habe eine einfache kleine Routine zur Überprüfung der Interpreterversion geschrieben, die das erste ist, was das Skript aufrufen würde ... außer es kommt nicht so weit. Stattdessen schlägt das Skript während der Python-Kompilierung fehl, bevor meine Routinen überhaupt aufgerufen werden. Daher sieht der Benutzer des Skripts einige sehr undurchsichtige Rückverfolgungen von Synaxfehlern, bei denen ein Experte feststellen muss, dass einfach die falsche Version von Python ausgeführt wird.
Ich weiß, wie man die Version von Python überprüft. Das Problem ist, dass einige Syntax in älteren Versionen von Python illegal ist. Betrachten Sie dieses Programm:
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
Wenn ich unter 2.4 laufe, möchte ich dieses Ergebnis
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
und nicht dieses Ergebnis:
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(Channeling für einen Mitarbeiter.)