Julia Try Catch声明没有捕获所有错误

时间:2016-07-06 00:59:07

标签: function try-catch julia

我编写了一个函数,其中包含要评估的子函数列表。我在这个子函数块周围有一个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

1 个答案:

答案 0 :(得分:1)

感谢StefanKarpinski建议重新启动repl会话,这很有效。

  

“我在Julia 0.3,0.4和0.5-dev上尝试了这个,它适用于所有这些。请尝试干净的会话,看看你是否可以重现。否则,请详细说明Julia的版本你正在使用。

- StefanKarpinski 7月6日4:55“