Pergunta

Eu tenho um script que quero sair cedo sob alguma condição:

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 ]

Eu corro este script usando execfile("foo.py") No prompt interativo do Python e gostaria que o script sai de voltar ao intérprete interativo. Como eu faço isso? Se eu usar sys.exit(), o intérprete Python sai completamente.

Foi útil?

Solução

Coloque seu bloco de código em um método e retorne desse método, assim:

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()

Além disso, a menos que haja um bom motivo para usar o ExecFile (), esse método provavelmente deve ser colocado em um módulo, onde pode ser chamado de outro script Python, importando -o:

import mymodule
mymodule.do_the_thing()

Outras dicas

No intérprete interativo; truque SystemExit criado por sys.exit e ignore:

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

Estou um pouco obcecado com ipython para trabalho interativo, mas confira o tutorial sobre incorporação de concha para uma solução mais robusta do que Este (que é a sua rota mais direta).

Em vez de usar o Execfile, você deve tornar o script importável (nome=='a Principal Proteção, separada em funções, etc.), e depois chama as funções do intérprete.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top