2010-06-01 15 views
36

Estoy escribiendo una pequeña aplicación y debo salir del programa varias veces.Cómo salir de un programa: sys.stderr.write() o imprimir

¿Debo usar:

sys.stderr.write('Ok quitting')
sys.exit(1)

O debo hacer:

print 'Error!'
sys.exit(1)

¿Qué es mejor y por qué? Tenga en cuenta que tengo que hacer esto mucho. El programa debería terminar por completo.

Respuesta

70
sys.exit('Error!') 

Nota de the docs:

Si se pasa a otro tipo de objeto, Ninguno es equivalente a pasar de cero, y cualquier otro objeto se imprime en sys.stderr y da como resultado un código de salida de 1. En particular, sys.exit ("algunos mensaje de error ") es una forma rápida de salir del programa cuando se produce un error.

6

Si se trata de un mensaje de error, normalmente debería ir a stderr, pero si esto es necesario depende de su caso de uso. Si espera que los usuarios redirecten a stdin, stderr y stdout, por ejemplo cuando ejecuta su programa desde una herramienta diferente, entonces debe asegurarse de que la información de estado y los mensajes de error se separen limpiamente.

Si solo usa el programa, probablemente no necesite molestarse. En ese caso, también podría presentar una excepción, y el programa terminará por sí mismo.

Por cierto, se puede hacer

print >>sys.stderr, "fatal error"  # Python 2.x 
print("fatal error", file=sys.stderr) # Python 3.x 
+0

Gracias por la respuesta. – user225312

12

Son dos formas diferentes de mostrar mensajes.

print generalmente va a sys.stdout y sabes a dónde va sys.stderr. Vale la pena saber la diferencia entre stdin, stdout, and stderr.

stdout se debe utilizar para la salida de programa normal, mientras que stderr se debe reservar solo para los mensajes de error (ejecución anormal del programa). Existen utilidades para dividir estas transmisiones, lo que permite a los usuarios de su código diferenciar entre salida normal y errores.

print puede imprimir sobre cualquier objeto de fichero, incluyendo sys.stderr:

print >> sys.stderr, 'My error message' 

Las ventajas de utilizar sys.stderr de errores en lugar de sys.stdout son:

  1. Si el usuario redirigido a stdout un archivo, todavía ven errores en la pantalla.
  2. Está sin búfer, por lo que si se redirige sys.stderr a un archivo de registro, hay menos posibilidades de que el programa falle antes de que se haya registrado el error.

Vale la pena señalar que hay una tercera vía que se puede brindar un mensaje de cierre:

sys.exit('My error message') 

Esto enviará un mensaje a stderr y salida.

Cuestiones relacionadas