Use `rethrow(e)` rather than `showerror`.

But FYI: what's going on behind the scenes is actually quite subtle and 
nowhere close to obvious. There's a certain amount of magic that gets 
performed to display that long, helpful message: see replutil.jl, and the 
`showerror` method for `DomainError`. The long error message is not generated 
at the call-site because doing so (IIRC) would have a deleterious effect on the 
compiler's ability to inline, and consequently be a big hit on performance. 
`rethrow` will include the backtrace from the offending line, allowing the 
normal error message to appear.

--Tim

On Sunday, December 28, 2014 05:08:50 PM Avik Sengupta wrote:
> So if I do sqrt(-1), it throws a DomainError, but I get a fairly long
> message explaining what is wrong.
> 
> julia> sqrt(-1)
> ERROR: DomainError
> sqrt will only return a complex result if called with a complex argument.
> try sqrt(complex(x))
>  in sqrt at math.jl:131
> 
> If I put the call to sqrt in a try block, how can I access the detailed
> error message in the catch block? One thing I tried is sprint(showerror,
> e), but that only returns "DomainError()", without any additional details.
> .
> 
> julia> try
>          sqrt(-1)
>        catch e
>           return sprint(showerror, e)
>        end
> "DomainError()"
> 
> I'm probably missing something obvious...

Reply via email to