Julia Try Catch语句未捕获所有错误

拉拉

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章