请考虑以下try
/ catch
流程
function test(x)
try x^3
if x < 0; error("i only accept x >= 0"); end
return x^3
catch
return abs(x)^3
end
end
在test(-2) # == 8
的情况下如何显示错误消息(和堆栈跟踪)?在这种情况下,我知道错误,但是如果它是带有断言等的更复杂的函数,我想知道具体是什么失败了。
需要在try-catch块中尝试rethrow()
,但是我仍然想要一个返回值。
答案 0 :(得分:1)
您可以在Exception
之后写上您选择的变量名称,然后将catch
保存到变量中。 error
创建一个ErrorException
。您可以使用Exception
查看此fieldnames(ErrorException)
的字段。 msg
字段为您提供传递给error
的消息。或者,您可以使用showerror
方法。
function test(x)
try x^3
if x < 0; error("i only accept x >= 0"); end
return x^3
catch e
showerror(stdout, e)
# or
println(e.msg)
end
end
对于堆栈跟踪,可以使用stacktrace(catch_backtrace())
。我们将catch_backtrace
传递给stacktrace
,因为我们通常想要的是获取最新异常的上下文而不是当前上下文的堆栈跟踪。