2012-05-29 15 views
6

¿Cuál es la diferencia entre llamar a sys.exit() y lanzar una excepción en Python?Diferencia entre llamar a sys.exit() y lanzar excepción

Digamos que tengo un script en Python, que hace lo siguiente:

  1. abrir un archivo
  2. líneas de lectura
  3. cerca que

Si no existe el archivo o una IOException se lanza en el tiempo de ejecución, ¿cuál de las siguientes opciones tiene más sentido?

  1. sin excepción/retén de la excepción, si se produce una excepción, no logra salir (que se espera que el comportamiento de todos modos)
  2. excepto/detectar la excepción, registra el mensaje de error, lanzar una excepción personalizada por mí mismo, falla a cabo .
  3. en un bloque except IOException, salga con un mensaje de error, p. sys.exit("something is wrong")

¿La opción 3 mata el proceso mientras que 1 y 2 no? ¿Cuál es la mejor manera de manejar las excepciones de Python dado que Python no tiene una excepción comprobada como Java (realmente soy un desarrollador de Java^_ ^)?

Respuesta

12

sys.exit plantea un SystemExit por sí mismo, así que desde un punto de vista puramente técnico, no hay diferencia entre la realización de esa excepción o el uso de sys.exit. Y sí, puede detectar SystemExit excepciones como cualquier otra excepción e ignorarlo.

Así que solo se trata de documentar mejor su intención.

PD: Tenga en cuenta que esto también significa que sys.exit es en realidad un término incorrecto, ya que si utiliza sys.exit en una secuencia, solo el hilo se termina y nada más. Eso puede ser bastante molesto, sí.

0

hay una pequeña, sutil diferencia:

import sys 

try: 
    sys.exit() 
except: 
    print("Caught") 

que except declaración mientras que captura la excepción:

import sys

try: 
    sys.exit() 
except Exception: 
    print("Caught") 

sale sin error. La excepción SystemExit (como KeyboardInterrupt) no está atrapada por except Exception, pero la atrapó solo el except.

lo tanto, si la persona que llama atrapa todo con except: (que es una mala práctica), su sys.exit no va a dejar de fumar pero será considerado como un "error" (por eso except Exception: es mejor estar seguro de capturar todas las excepciones, excepto CTRL + C y salida del sistema

Cuestiones relacionadas