我编写了一个函数,其中包含要评估的子函数的列表。我在此子功能块周围有一条try-catch语句,这样,如果其中一个引发错误,catch语句将确保子功能返回的变量将被设置为文本消息。
子功能示例(按预期工作)
function f(x)
SQRT = sqrt(x)
return SQRT
end
f(9) #returns the square root of a positive number
> 3.0
f(-9) #error when you try to take the square root of a negative number
> LoadError: DomainError: while loading In[80], in expression
starting on line 1 in f at In[76]:2
带有try-catch语句的示例主要功能(无法正常工作)
function g(y)
a=[]
b=[]
try
a=f(y)
b="works"
catch
a="no"
b="no"
end
return a,b
end
g(9)
> (3.0,"works")
g(-9)
> LoadError: DomainError: while loading In[96], in expression
starting on line 1 in f at In[76]:2
我知道使用f(x)时错误是正确的,因为我没有使用try-catch语句。但是我期望try-catch语句在g(y)内对f(y)求值时会捕获此错误,并且会返回a =“ no”和b =“ no”。为什么try-catch语句未出现此错误并按预期工作?
有没有一种方法可以使该语句起作用?我需要它以这种方式工作,以避免将try-catch语句放入我编写的所有子功能中。在此示例中,将try-catch插入f(x)会很容易,并且可以按以下方法解决问题,但是我不想在我的真实代码中这样做,因为子函数可能会失败的位置,因此我必须对代码进行重大更改,以考虑到所有潜在的故障。
带有try-catch语句的示例子功能(按预期工作)
function h(x)
SQRT = []
try
SQRT = sqrt(x)
catch
SQRT = "no"
end
return SQRT
end
h(9)
> 3.0
h(-9)
> "no"
主要功能示例(按预期工作)
function i(y)
a=h(y)
b="works"
return a,b
end
i(9)
> (3.0,"works")
i(-9)
> ("no","works")
换句话说,我不想在第二个示例中使用该方法,是否可以使用类似于第一个示例的方法来获取我想要的东西?
我正在使用Julia版本0.4.6
感谢StefanKarpinski建议重新启动repl会话,该方法是有效的。
“我已经在Julia 0.3、0.4和0.5-dev上进行了尝试,并且可以在所有版本中使用。请在干净的环境中进行尝试,看看是否可以复制。否则,请提供您所使用的Julia版本的详细信息使用。
– StefanKarpinski 7月6日4:55“
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句