2009-06-04 10 views
5

¿Qué comando usas en python para terminar un programa?Terminación de un programa de Python

es decir, el equivalente de "final" en básico, o "salir" en BASH.

Veo que "romper" te saca de un bucle, y "dejar de fumar" está todo relacionado con cosas de "clase" que aún no entiendo. he intentado

import sys 
sys.exit() 

pero mostrará siguiente error:

Traceback (most recent call last): 
    File "C:\Documents and Settings\....\Desktop\current file_hand\Python_1.py", line 131, in <module> 
    sys.exit() 
SystemExit 

¿hay alguna solución para ello.

+0

¿Está utilizando Python de forma interactiva? Desde el >>> prompt? ¿O ejecutando un script? –

+0

Puede haber un IDE - IDLE o ActivePython - que capte todo, ya que ejecutan las secuencias de comandos en proceso. –

Respuesta

10

sys.exit (error_code)

ERROR_CODE será 0 para una salida normal, 1 o algún otro número positivo para una salida debido a un error de algún tipo, por ejemplo, el usuario ha ingresado los parámetros incorrectos.

sys.exit() "no está definido en algunas arquitecturas", (aunque funcionó cuando lo probé en mi máquina Linux!)

El official python docs explica esto con más detalle.

Es una muy buena idea para todos sus programas y scripts seguir la convención de devolución.

Por ejemplo, si ejecuta un script que toma algunos datos de una base de datos; devolviendo 0 y sin salida, significa que la base de datos está perfectamente bien, simplemente no hay nada en ella (o nada que coincida con su consulta). Si se devuelve 1 y no hay salida significa que hay un error en la base de datos, todo el proceso debe abortarse, ya que continuar dañaría el otro sistema también.

1

Intenta ejecutar un intérprete de Python fuera de tu IDE. En mi instalación de Windows la línea de comandos sencilla python.exe, ambas opciones de trabajo:

>>> import sys 
>>> sys.exit() 

o

>>> raise SystemExit 
10

sys.exit() plantea la excepción SystemExit.

Si no detecta esa excepción, el programa finaliza.

Puesto que usted está consiguiendo que la producción, no estoy seguro de lo que está sucediendo, pero supongo que vas a tomar todas las excepciones y les imprime a sí mismo:

try: 
    ... 
except: 
    print exception somehow 
    raise 

Si ese es el caso, don' hacer eso coger Exception lugar:

... 
    except Exception: 
     ... 

De esa manera no va a coger cosas no pretende ser apresado (como SystemExit).

+0

Esto es cierto para Python 2.5+. Sin embargo, SystemExit hereda de Exception en Python 2.4 y anteriores. – Miles

+0

Nunca capture 'Excepción' en el código de manejo de errores, en lugar de capturar' StandardError', del cual todas las excepciones de error heredan (al menos v2.0: http://docs.python.org/release/2.0/lib/module- exceptions.html). – RobM

2

import sys

sys.exit (0)

7

También debe considerar alternativas a salir directamente.A menudo, return funciona igual de bien si ajusta el código en una función. (Mejor, de hecho, ya que evita sys.exit() rarezas.)

def main(): 
    ...do something... 
    if something: 
     return    # <----- return takes the place of exit 
    ...do something else... 

main() 
+2

+1 en el uso de una declaración de retorno en su lugar. Usar una declaración de devolución (con o sin un valor de retorno) significa que su programa de python se puede usar desde una sesión interactiva o como parte de algún otro script. Me irritan mucho las secuencias de comandos que llaman a sys.exit y me expulsan del intérprete de Python. –

+0

+1: nunca uso sys.exit yo mismo. – nosklo

1

En su caso, es probable que su error que usted tiene un desnudo a excepción de bloque que está cogiendo la excepción SystemExit, así:

import sys 
try: 
    sys.exit(return_code) 
except: 
    pass 

la forma correcta de arreglar el problema es eliminar el excepto: porción, y en su lugar sólo detectar las excepciones que se pueden esperar para ser posiblemente levantada. Por ejemplo:

try: 
    # Code which could raise exceptions 
except (NameError, ValueError): 
    # Do something in case of NameError or ValueError, but 
    # ignore other exceptions (like SystemExit) 

Sin embargo, si realmente quería su programa para salir, el siguiente código funcionará:

import os 
try: 
    os._exit(return_code) 
except: 
    pass 

Esto salir incluso con la excepto: cláusula, ya que sólo directamente llama a la función C del mismo nombre que mata su proceso. Esto es no recomendado a menos que sepa lo que está haciendo, ya que esto no llamará a los manejadores de limpieza ni a los búfers IO abiertos.

2
sys.exit() #to exit the program 
return  #to exit from a function 
Cuestiones relacionadas