Consider
my_e = try
include_string(Main, "throw(ArgumentError(\"test\"))")
catch e
e
end
The exercise is to extract the ArgumentError("test")
from my_e
using public API. Is this possible?
Currently it is wrapped in a LoadError
, the internal structure of which is not public API, and may change in the future. So my_e.error
is not what I am looking for.
I would just do:
e isa LoadError ? e.error : e
to use e.error
if it is a LoadError
. We should really just document this field, since there’s no way to use LoadError
without it and it has been stable for a decade now. But you’re correct that you shouldn’t assume include_string
will always wrap exceptions in a LoadError
.
Alternatively, since include_string
is nowadays implemented in pure Julia using (it looks like) only public APIs, in principle you could re-implement it (i.e. copy-and-paste the implementation) and get rid of the LoadError
.
As you noticed, there is a to-do to get rid of the LoadError
for include_string
in a future Julia version. Maybe this could be done in 1.x, since it’s not guaranteed by the docs and we got rid of the LoadError
wrapper for macroexpand
in 1.7 (julia#38379). Anyone want to file a PR?
1 Like