Julia 为什么最终会阻止错误?
从这里的Julia 为什么最终会阻止错误?,julia,Julia,从这里的finally部分:,他们使用以下示例: f = open("file") try # operate on file f finally close(f) end 在REPL中运行类似代码时,会发生以下情况: julia> f = open("myfile.txt") IOStream(<file myfile.txt>) julia> try sqrt(-10) finally close(f
finally
部分:,他们使用以下示例:
f = open("file")
try
# operate on file f
finally
close(f)
end
在REPL中运行类似代码时,会发生以下情况:
julia> f = open("myfile.txt")
IOStream(<file myfile.txt>)
julia> try
sqrt(-10)
finally
close(f)
end
ERROR: DomainError:
[inlined code] from none:2
in anonymous at no file:0
julia>f=open(“myfile.txt”)
IOStream()
朱莉娅:试试看
sqrt(-10)
最后
关闭(f)
结束
错误:域错误:
[内联代码]来自无:2
在匿名中,没有文件:0
知道有什么区别吗?
最后
没有捕捉到异常。这是为了确保无论是否发生异常,都会执行清理步骤。请注意以下两者之间的区别:
try
sqrt(-10)
catch
println("Exception swallowed!")
end
及
通常情况下,人们会将捕获和最终捕获结合起来:
try
sqrt(-10)
catch
println("Swallowed exception.")
finally
println("...but finally ran regardless.")
end
最后
仍然完成了这里的工作,因为已经执行了close()
操作。您可以通过添加返回false的isopen(f)
在代码中检查这一点。尽管如此,您还是会得到错误,因为您试图执行产生错误的操作。try
块后面总是跟着catch
块。在您的程序中,您忘记将catch块放在finally
块之前。虽然try
块后面通常是catch
块,但情况并非总是如此。有时,就像在文档中一样,您希望错误传播。。。但是不管怎样,文件都将被关闭。那么为什么我会得到错误呢?我猜这是误导,因为它看起来与打开的文件有关,但实际上与sqrt(-1)有关?是的,没错sqrt(-1)
是一个DomainError
,因为sqrt
返回一个Float64
。如果代码是sqrt(-1+0im)
,那么它就可以正常工作。
try
sqrt(-10)
catch
println("Swallowed exception.")
finally
println("...but finally ran regardless.")
end