web-dev-qa-db-fra.com

python 2 code: si python 3 alors sys.exit ()

J'ai un gros morceau de code Python 2 seulement. Il veut vérifier Python 3 au début et quitter si python3 est utilisé. J'ai donc essayé :

import sys

if sys.version_info >= (3,0):
    print("Sorry, requires Python 2.x, not Python 3.x")
    sys.exit(1)

print "Here comes a lot of pure Python 2.x stuff ..."
### a lot of python2 code, not just print statements follows

Cependant, la sortie ne se produit pas. La sortie est:

$ python3 testing.py 
  File "testing.py", line 8
        print "Here comes a lot of pure Python 2.x stuff ..."
                                                        ^
SyntaxError: invalid syntax

Ainsi, il ressemble à python vérifie le code entier avant d'exécuter quoi que ce soit, et donc l'erreur.

Existe-t-il un bon moyen pour le code python2 de vérifier si python3 est utilisé, et si c'est le cas, imprimez quelque chose d'amical puis quittez?

38
superkoning

Python compilera en octets votre fichier source avant de commencer à l'exécuter. Le fichier entier doit au moins analyser correctement, sinon vous obtiendrez un SyntaxError.

La solution la plus simple pour votre problème est d'écrire un petit wrapper qui analyse les deux, Python 2.x et 3.x. Exemple:

import sys
if sys.version_info >= (3, 0):
    sys.stdout.write("Sorry, requires Python 2.x, not Python 3.x\n")
    sys.exit(1)

import the_real_thing
if __== "__main__":
    the_real_thing.main()

La déclaration import the_real_thing ne sera exécuté que après l'instruction if, donc le code de ce module n'est pas obligé d'analyser en tant que Python 3.x code.

64
Sven Marnach