Un pequeño comentario, sus putsescrituras en la salida estándar, mientras que dielas escrituras salida estándar de errores, por lo que: $stderr.puts "Message goes here".
Cdarke
Sé que esto no fue una respuesta, pero respondió mi pregunta, gracias
Patrick
Solo como referencia, en Python lo es sys.exit("Message goes to stderr").
anatoly techtonik
Respuestas:
361
La abortfunción hace esto. Por ejemplo:
abort("Message goes here")
Nota: el abortmensaje se escribirá en STDERRlugar de al putsque se escribirá STDOUT.
¡Guauu! Buen hallazgo! Lástima que no solo sobrecargaran la salida con esta funcionalidad ...
Mike Stone
56
Tenga en cuenta que abortar sale del programa con un estado falso que representa un error. salir por defecto sale con un estado de verdadero que representa el éxito. Asegúrese de usar el correcto para la situación.
Alex Spurling
1
re. Comentario de Mike Stone, a veces parece que Ruby fue escrito por un equipo de personas que no tenían comunicación entre ellos, ¿no? (Aún así, es muy fácil programar en él.)
JellicleCat
24
Si desea denotar un error real en su código, puede plantear una RuntimeErrorexcepción:
raise RuntimeError,'Message goes here'
Esto imprimirá un seguimiento de pila, el tipo de excepción que se genera y el mensaje que proporcionó. Dependiendo de sus usuarios, un seguimiento de pila puede ser demasiado aterrador, y el mensaje real puede perderse en el ruido. Por otro lado, si muere debido a un error real, un seguimiento de pila le dará información adicional para la depuración.
No necesita mencionar RuntimeError para generar uno (es el tipo predeterminado de excepción planteada), por lo que el siguiente código será suficiente: elevar 'El mensaje va aquí'
sunaku
sunaku: aunque su comentario es perfectamente válido, a menudo descubrí que ser más explícito puede ser útil, en particular para otras personas que leen el código más adelante.
shevy
2
Nunca he oído hablar de tal función, pero sería lo suficientemente trivial como para implementar ...
def die(msg)
puts msg
exit
end
Entonces, si esto está definido en algún archivo .rb que incluyes en todos tus scripts, eres dorado ... solo porque no está integrado no significa que no puedas hacerlo tú mismo ;-)
Resulta que la función 'abortar' lo hace (vea mi respuesta a continuación)
Chris Bunch
1
¿Por qué escribir código cuando la función abortar lo hace por usted?
Gary Haran
2
@ChrisBunch Esto no es lo mismo que la función de cancelación : el valor exitpredeterminado es regresar como si hubiera tenido éxito. abortdevuelve un fallo exit 1devolverá un fallo también.
TemporalWolf
2
Llegué aquí buscando una manera de ejecutar algún código cada vez que finaliza el programa. Encontré esto :
Kernel.at_exit { puts "sayonara"}# do whatever# [...]# call #exit or #abort or just let the program end# calling #exit! will skip the call
Llamado varias veces registrará múltiples manejadores.
puts
escrituras en la salida estándar, mientras quedie
las escrituras salida estándar de errores, por lo que:$stderr.puts "Message goes here"
.sys.exit("Message goes to stderr")
.Respuestas:
La
abort
función hace esto. Por ejemplo:Nota: el
abort
mensaje se escribirá enSTDERR
lugar de alputs
que se escribiráSTDOUT
.fuente
Si desea denotar un error real en su código, puede plantear una
RuntimeError
excepción:Esto imprimirá un seguimiento de pila, el tipo de excepción que se genera y el mensaje que proporcionó. Dependiendo de sus usuarios, un seguimiento de pila puede ser demasiado aterrador, y el mensaje real puede perderse en el ruido. Por otro lado, si muere debido a un error real, un seguimiento de pila le dará información adicional para la depuración.
fuente
Nunca he oído hablar de tal función, pero sería lo suficientemente trivial como para implementar ...
Entonces, si esto está definido en algún archivo .rb que incluyes en todos tus scripts, eres dorado ... solo porque no está integrado no significa que no puedas hacerlo tú mismo ;-)
fuente
exit
predeterminado es regresar como si hubiera tenido éxito.abort
devuelve un falloexit 1
devolverá un fallo también.Llegué aquí buscando una manera de ejecutar algún código cada vez que finaliza el programa.
Encontré esto :
Llamado varias veces registrará múltiples manejadores.
fuente