Jon*_*nas 5 error-handling julia
如果我编写一个除了抛出如下错误之外什么也不做的脚本:
throw(ErrorException("a useful message"))
Run Code Online (Sandbox Code Playgroud)
当我执行脚本时,出现以下错误。
throw(ErrorException("a useful message"))
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我的错误消息中有一个LoadError:。
我对其他错误类型也有同样的看法。例如:
throw(DivideError())
Run Code Online (Sandbox Code Playgroud)
$ julia throwError.jl
ERROR: LoadError: a useful message
Stacktrace:
[1] top-level scope at /path/throwError.jl:1
[2] include(::Function, ::Module, ::String) at ./Base.jl:380
[3] include(::Module, ::String) at ./Base.jl:368
[4] exec_options(::Base.JLOptions) at ./client.jl:296
[5] _start() at ./client.jl:506
in expression starting at /path/throwError.jl:1
Run Code Online (Sandbox Code Playgroud)
“为什么?”的完整答案 这个问题相当复杂。回答的一种方法是简单地参考文档字符串LoadError:
Run Code Online (Sandbox Code Playgroud)LoadError(file::AbstractString, line::Int, error)
因此,因为错误是在 julia 尝试包含该文件时发生的,而不是在成功包含后调用文件中的函数时发生的,所以错误被包装在LoadError.
但 Julia 真的必须将错误包装在LoadErrors 中吗?答案似乎是否定的,因为 Julia 的回溯已经改进,LoadError不再需要 s 来确保开发人员拥有有关错误位置的必要信息。从 1.2 版本开始,弃用它们的 PR 一直悬而未决。似乎仍有一些事情需要解决,但我们希望很快就能摆脱它们。
其他相关链接:
https://github.com/JuliaLang/julia/pull/31881:合并 PR:Ensure syntax error locations appear in backtraces- 改进回溯以实现删除LoadError.
https://github.com/JuliaLang/julia/issues/31830#issuecomment-487453858:评论解释了弃用的一些背景LoadError。