Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为Julia跳过循环中的错误_Julia - Fatal编程技术网

如何为Julia跳过循环中的错误

如何为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块中,您

我想跳过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
块中,您可以放弃错误并返回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