我编写了一个函数,其中包含要评估的子函数列表。我在这个子函数块周围有一个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
答案 0 :(得分:1)
感谢StefanKarpinski建议重新启动repl会话,这很有效。
“我在Julia 0.3,0.4和0.5-dev上尝试了这个,它适用于所有这些。请尝试干净的会话,看看你是否可以重现。否则,请详细说明Julia的版本你正在使用。
- StefanKarpinski 7月6日4:55“