2008-10-07 12 views
105

Duplicar posible:
Terminating a Python script¿Cómo cancelo la ejecución de un script de Python?

que tiene una secuencia de comandos de Python simple que quiero dejar de ejecutar si se cumple una condición.

Por ejemplo:

done = True 
if done: 
    # quit/stop/exit 
else: 
    # do other stuff 

Esencialmente, Busco algo que se comporta de forma equivalente a la palabra clave 'retorno' en el cuerpo de una función que permite el flujo del código para salir de la función y no ejecutar el código restante.

Respuesta

183

Para salir de una secuencia de comandos que puede utilizar,

import sys 
sys.exit() 

También puede proporcionar un valor de estado de salida, por lo general un número entero.

import sys 
sys.exit(0) 

Salidas con cero, lo que generalmente se interpreta como éxito. Los códigos distintos de cero generalmente se tratan como errores. El valor predeterminado es salir con cero.

import sys 
sys.exit("aa! errors!") 

Prints "aa! Errors!" y sale con un código de estado de 1.

También hay una función _exit() en el módulo os. La función sys.exit() genera una excepción SystemExit para salir del programa, por lo que las sentencias try y el código de limpieza se pueden ejecutar. La versión os._exit() no hace esto. Simplemente finaliza el programa sin realizar ninguna limpieza o limpieza de buffers de salida, por lo que normalmente no debería utilizarse.

El Python docs indica que os._exit() es la forma normal de finalizar un proceso secundario creado con una llamada a os.fork(), por lo que tiene un uso en ciertas circunstancias.

+0

'sys.stdout.flush()' emparejado con 'os._exit (0)' era exactamente lo que necesitaba. ¡Gracias! – Anconia

4

exit() debería hacer el truco

+0

Tres segundos más rápido que yo: P – Dana

+3

Y hasta lo probé en un shell primero :-) – Sec

+0

Maldita sea, no lo hice ver esto/reaccionar a tiempo (también estaba probando en el intérprete para estar seguro) * sacude el puño *;) – Runevault

3

exit() debería hacerlo.

3

Si todo el programa debe dejar de usar sys.exit() de lo contrario, simplemente use un retorno vacío.

+0

'return' no funcionará fuera de una función. – unfa

16
import sys 
sys.exit() 
13

Podría poner el cuerpo de su secuencia de comandos en una función y luego podría regresar de esa función.

def main(): 
    done = True 
    if done: 
    return 
    # quit/stop/exit 
    else: 
    # do other stuff 

if __name__ == "__main__": 
    #Run as main program 
    main() 
11

También se puede usar:

import sys 
sys.exit(...) 

o:

raise SystemExit(...) 

El parámetro opcional puede ser un código de salida o un mensaje de error. Ambos métodos son idénticos. Antes prefería sys.exit, pero últimamente cambié a subir SystemExit, porque parece destacarse mejor entre el resto del código (debido a la palabra clave raise).

0

Trate

sys.exit("message") 

Es como el Perl

die("message") 

si esto es lo que busca. Termina la ejecución del script incluso si se llama desde un módulo/def/función importado

+3

¿ninguna de las respuestas sugirió tal enfoque? – SilentGhost

Cuestiones relacionadas