如何为Julia跳过循环中的错误
我想跳过julia中循环过程中的错误。下面是一个例子。我想计算向量中每个元素的平方根。由于sqrt(-16)是一个复杂的值,Julia将报告错误并停止循环。我希望julia在循环中出现错误时继续循环。我要查找的输出是result=[1,2,399999,5,6],其中99999表示存在错误如何为Julia跳过循环中的错误,julia,Julia,我想跳过julia中循环过程中的错误。下面是一个例子。我想计算向量中每个元素的平方根。由于sqrt(-16)是一个复杂的值,Julia将报告错误并停止循环。我希望julia在循环中出现错误时继续循环。我要查找的输出是result=[1,2,399999,5,6],其中99999表示存在错误 vec = [1,4,9,-16,25,36] result = zeros(6) for i = 1:6 result[i] = sqrt(vec[i]) end A将截获错误。在catch块中,您
vec = [1,4,9,-16,25,36]
result = zeros(6)
for i = 1:6
result[i] = sqrt(vec[i])
end
A将截获错误。在catch
块中,您可以放弃错误并返回sentinel值:
vec = [1,4,9,-16,25,36]
result = zeros(6)
for i = 1:6
result[i] = try
sqrt(vec[i])
catch
999999
end
end
我想这是一个玩具的例子。我要重申:首先最好避免错误。除了根据问题的精神使用另一个答案,即使用
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
然后,您可以根据需要按实部和虚部对向量进行过滤。
99999
使用起来似乎有些奇怪,特别是因为它是sqrt
的有效输出。您是否考虑过使用missing
或nothing
,或者可能使用-1
,因为该值不在输出域中?基本上和@Mason说的一样,顺便说一句。
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