2012-04-15 13 views
18

que tiene este try/excepto el código:¿Cómo salgo del programa en try/except?

document = raw_input ('Your document name is ') 

try: 
    with open(document, 'r') as a: 
     for element in a: 
      print element 

except: 
    print document, 'does not exist' 

¿Cómo se sale del programa después imprimo "[nombre de archivo] no existe"? break y pass obviamente no funcionan, y no quiero tener ningún error de bloqueo, por lo que sys.exit no es una opción.

Por favor, ignore la parte try - es solo un maniquí.

Respuesta

6

Usando

sys.exit(1) 

no es un error de estrellarse, que es una forma perfectamente normal para salir de un programa. El código de salida de 1 es una convención que significa que algo salió mal (devolvería 0 en el caso de una ejecución exitosa).

+0

Por curiosidad, ¿hay algún problema con el uso de 'quit()'? Nadie parece mencionar eso. –

+2

'quit()' solo está pensado para funcionar en el shell interactivo de Python. No lo usaría en un programa. No aparece en http://docs.python.org/library/functions.html y no esperaría que fuera portátil para otras implementaciones de Python. –

23

Uso del sys.exit:

import sys 

try: 
    # do something 
except Exception, e: 
    print >> sys.stderr, "does not exist" 
    print >> sys.stderr, "Exception: %s" % str(e) 
    sys.exit(1) 

Una buena práctica es imprimir la excepción de que se produjo lo que se puede depurar después.

También puede imprimir stacktrace con el módulo traceback.

Tenga en cuenta que la int que devuelve en sys.exit será el código de retorno de su programa. Para ver lo que el código de salida devuelto su programa (el cual le dará información sobre lo que ocurre y puede ser automatizado), que puede hacer:

echo $? 
7

También puede poner su código en una función y emitir una devolución. Puedes llamarlo principal al que puedes llamar desde tu script.

def main(): 
    document = raw_input ('Your document name is ') 

    try: 
     with open(document, 'r') as a: 
      for element in a: 
       print element 

    except: 
     print document, 'does not exist' 
     return 

if __name__ == "__main__": 
    main() 
+0

El problema con "devolver" en caso de excepciones es que no verá ningún código de error en la línea de comandos. Si tiene sistemas de monitoreo, normalmente verificarán los registros y el código de retorno de su programa, de modo que si el programa devuelve 0 en todos los casos, incluso los errores pueden ser difíciles de mantener. –

+0

@linker Aún puede imprimir un mensaje de error antes de volver. No todos los programas necesitan producir resultados para otros programas; a veces, simplemente ser legible por humanos es suficiente. – agf

+2

@agf Solo estoy explicando lo que he encontrado que es más útil en el contexto del mundo real, lo mejor es tener una convención de código de retorno legible y humana. –

5

Simplemente vuelva a subirlo. Es más amigable para el desarrollador

document = raw_input ('Your document name is ') 

try: 
    with open(document, 'r') as a: 
     for element in a: 
      print element 

except: 
    print document, 'does not exist' 
    raise 

Comprobar python document en la sección Excepciones sensibilización sobre el error re-subida en except.

Cuestiones relacionadas