我想跳过茱莉亚循环中的错误。示例如下。我想计算向量中每个元素的平方根。由于sqrt(-16)是一个复杂值,Julia将报告错误并停止循环。我希望julia在循环中有错误时继续循环。我正在寻找的输出是结果= [1、2、3、99999、5、6],其中99999表示存在错误。
vec = [1,4,9,-16,25,36]
result = zeros(6)
for i = 1:6
result[i] = sqrt(vec[i])
end
Run Code Online (Sandbox Code Playgroud)
A try/catch将拦截错误。在catch块内,您可以丢弃错误并返回标记值:
vec = [1,4,9,-16,25,36]
result = zeros(6)
for i = 1:6
result[i] = try
sqrt(vec[i])
catch
999999
end
end
Run Code Online (Sandbox Code Playgroud)
我认为这是一个玩具示例。我将重申Julia 的风格指南:首先最好避免错误。
除了本问题实质中使用的其他答案外try / catch,您还有其他选择。最好的方法可能是:
function mysqrt(x)
if x < 0
999999.0
else
sqrt(x)
end
end
vec = [1,4,9,-16,25,36]
julia> mysqrt.(vec)
6-element Array{Float64,1}:
1.0
2.0
3.0
999999.0
5.0
6.0
Run Code Online (Sandbox Code Playgroud)
尽管我强烈建议您不要将其999999.0用作哨兵值,而应使用NaN或missing。
您可以选择的另一种选择是将其提升vec为a,Vector{Complex}以免遇到域错误,但这会降低性能。看起来像
julia> sqrt.(complex(vec))
6-element Array{Complex{Float64},1}:
1.0 + 0.0im
2.0 + 0.0im
3.0 + 0.0im
0.0 + 4.0im
5.0 + 0.0im
6.0 + 0.0im
Run Code Online (Sandbox Code Playgroud)
然后您可以根据需要按实部和虚部过滤向量。