【问题标题】:julia: display the `catch` error in control flowjulia:在控制流中显示“catch”错误
【发布时间】:2019-06-07 19:08:46
【问题描述】:

考虑以下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 的情况下显示错误消息(和堆栈跟踪)?在这种情况下,我知道错误,但如果它是带有断言等的更复杂的函数,我想知道具体失败的原因。

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

【问题讨论】:

    标签: error-handling try-catch julia


    【解决方案1】:

    catch 之后写入您选择的变量名称后,您可以将Exception 保存到变量中。 error 创建一个 ErrorException。您可以使用fieldnames(ErrorException) 查看此Exception 的字段。 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,因为我们通常想要的是获取最近异常上下文的堆栈跟踪,而不是当前上下文。

    【讨论】:

    • 谢谢!在我的函数中包含 stacktrace(catch_backtrace()) 的最佳方式是什么?
    • @jjjjjj 如果您想要显示堆栈跟踪,只需在返回abs(x)^3 之前添加display(stacktrace(catch_backtrace()))
    猜你喜欢
    • 2021-02-13
    • 2019-12-14
    • 1970-01-01
    • 2017-01-19
    • 2015-06-30
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多