我在 Julia 中有一个函数,我想调用一组参数。它可能会引发异常,我想将其转换为带有 bactrace 的字符串并将其记录下来以供进一步检查。
for i in 1:100
try
myfun(i)
catch ex
println(ex)
println(bactrace(ex)) # does not work
end
end
如何在 Julia 中做到这一点?
我在 Julia 中有一个函数,我想调用一组参数。它可能会引发异常,我想将其转换为带有 bactrace 的字符串并将其记录下来以供进一步检查。
for i in 1:100
try
myfun(i)
catch ex
println(ex)
println(bactrace(ex)) # does not work
end
end
如何在 Julia 中做到这一点?
我知道这是一个有点老的问题,但这是我发现的:
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/
在代码中进行更多搜索发现这种工作。它使用了一个未在 API 中导出的函数,因此它将来可能会中断,但现在它会打印出一个堆栈跟踪。
try
function()
catch ex
Base.error_show(STDERR, ex, catch_backtrace())
end