为什么除了我想抛出的错误之外,Julia 还抛出 LoadError

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)

ahn*_*abb 4

“为什么?”的完整答案 这个问题相当复杂。回答的一种方法是简单地参考文档字符串LoadError

LoadError(file::AbstractString, line::Int, error)
Run Code Online (Sandbox Code Playgroud)

includeing、requireing 或using文件时发生错误。错误细节应该在.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