I want to write to either STDOUT
or STDERR
a clean, simple error message for the user, without the (verbose) backtrace. I am currently using raise
to write the error message and exit, as in this simplified example:
#!/usr/bin/env ruby
def bar
raise "this needs to be clean, no backtrace"
end
bar
It writes this to STDERR
:
/Users/foo/test/test1.rb:4:in `bar': this needs to be clean, no backtrace (RuntimeError)
from /Users/foo/test/test1.rb:7:in `<main>'
I want to write just this part:
this needs to be clean, no backtrace
The real-life example has a much more verbose backtrace, and multiple raise
statements to handle different failure modes with customized messages.
I am aware that I can do something like this (for clean STDOUT
), but I want to avoid repetitive code:
puts "this needs to be clean, no backtrace"
raise "this needs to be clean, no backtrace"
Related:
- Unhandled Exceptions in Ruby - this answer suggests a more complex way of handling exceptions (namely, catching and printing the error message) than I need. All I need is: (a)
raise
- or something similar - to terminate the program immediately, and (b) print just the error message, not the full stack trace or backtrace, which is confusing for our users.