3

我在 Julia 中有一个函数,我想调用一组参数。它可能会引发异常,我想将其转换为带有 bactrace 的字符串并将其记录下来以供进一步检查。

for i in 1:100
    try
        myfun(i)
    catch ex
        println(ex)
        println(bactrace(ex)) # does not work
    end
end

如何在 Julia 中做到这一点?

4

2 回答 2

4

我知道这是一个有点老的问题,但这是我发现的:

Base.show_backtrace(io, bt) 

只显示回溯,并且

sprint(io->Base.show_backtrace(io, bt)) 

将它打印成一个字符串,以防你想记录它。

编辑:上一个答案中的error_show现在是showerror;它似乎

str = showerror(STDOUT, ex, catch_backtrace())

来源:https ://groups.google.com/forum/#!topic/julia-users/S485_5jG2Nw

更新 2:在 v0.5 中,您可以这样做stacktrace()并且catch_stacktrace()

尽管您必须遍历堆栈跟踪数组才能打印它AFAIK。

资料来源:https ://docs.julialang.org/en/stable/manual/stacktraces/

于 2016-04-04T07:48:35.343 回答
1

在代码中进行更多搜索发现这种工作。它使用了一个未在 API 中导出的函数,因此它将来可能会中断,但现在它会打印出一个堆栈跟踪。

try
    function()
catch ex
    Base.error_show(STDERR, ex, catch_backtrace())
end
于 2013-07-07T10:20:47.293 回答