Error handling 朱莉娅:显示控制流中的“catch”错误

Error handling 朱莉娅:显示控制流中的“catch”错误,error-handling,try-catch,julia,Error Handling,Try Catch,Julia,考虑以下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 功能测试(x) 试试x^3 如果x=0”);结束 返回x^3 抓住 返回abs(x)^3 结束 结束 在test(-2)#==8的情况下,如何显示错误消息(和

考虑以下
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
功能测试(x)
试试x^3
如果x<0;错误(“我只接受x>=0”);结束
返回x^3
抓住
返回abs(x)^3
结束
结束
test(-2)#==8
的情况下,如何显示错误消息(和堆栈跟踪)?在本例中,我知道错误,但如果它是一个带有断言等的更复杂的函数,我想知道具体失败了什么


需要在try catch块中尝试
rethrow()
,但我仍然需要一个返回值

catch
之后写入所选变量名后,可以将
异常
保存到变量中<代码>错误创建一个
错误异常
。您可以使用
字段名(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
功能测试(x)
试试x^3
如果x<0;错误(“我只接受x>=0”);结束
返回x^3
抓住e
淋浴器(标准出口,东区)
#或
println(e.msg)
结束
结束

对于堆栈跟踪,可以使用
stacktrace(catch\u backtrace())
。我们转到,因为我们通常想要的是获取最近异常的上下文的堆栈跟踪,而不是当前上下文。

谢谢!在我的函数中包含
stacktrace(catch_backtrace())
的最佳方法是什么?@jjj如果您想要显示堆栈跟踪,只需在返回
abs(x)^3
之前添加
display(stacktrace(catch_backtrace())