julia:在控制流中显示`catch`错误

时间:2019-06-07 19:08:46

标签: 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

test(-2) # == 8的情况下如何显示错误消息(和堆栈跟踪)?在这种情况下,我知道错误,但是如果它是带有断言等的更复杂的函数,我想知道具体是什么失败了。

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

1 个答案:

答案 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,因为我们通常想要的是获取最新异常的上下文而不是当前上下文的堆栈跟踪。