Question

J'ai un script que je veux sortir tôt sous certaines conditions:

if not "id" in dir():
     print "id not set, cannot continue"
     # exit here!
# otherwise continue with the rest of the script...
print "alright..."
[ more code ]

Je lance ce script en utilisant execfile("foo.py") à partir de l'invite interactive Python et je voudrais que le script pour quitter retourner à interpréteur interactif. Comment puis-je faire cela? Si j'utilise sys.exit(), l'interpréteur Python sort complètement.

Était-ce utile?

La solution

Mettez votre bloc de code dans une méthode et le retour de cette méthode, comme par exemple:

def do_the_thing():
    if not "id" in dir():
         print "id not set, cannot continue"
         return
         # exit here!
    # otherwise continue with the rest of the script...
    print "alright..."
    # [ more code ]

# Call the method
do_the_thing()

En outre, à moins qu'il y ait une bonne raison d'utiliser execfile (), cette méthode devrait probablement être mis dans un module, où il peut être appelé à partir d'un autre script Python en importer:

import mymodule
mymodule.do_the_thing()

Autres conseils

Dans l'interpréteur interactif; attraper SystemExit soulevé par sys.exit et l'ignorer:

try:
    execfile("mymodule.py")
except SystemExit:
    pass

Je suis un peu obsédé par ipython pour le travail interactif, mais vérifier le tutoriel sur shell pour l'intégration d'une solution plus robuste que celui-ci (qui est votre itinéraire le plus direct).

Au lieu d'utiliser execfile, vous devez faire le script importable ( nom == ' principale protection, en fonctions, seperated etc.), puis appeler les fonctions de l'interprète.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top