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

Function Julia Try Catch语句未捕获所有错误,function,try-catch,julia,Function,Try Catch,Julia,我已经编写了一个函数,其中包含要计算的子函数列表。我在这个子函数块周围有一个try-catch语句,因此如果其中一个子函数抛出错误,catch语句将确保子函数返回的变量只设置为文本消息 示例子功能(按预期工作) 带有try-catch语句的主函数示例(未按预期工作) 我知道当我使用f(x)时错误是正确的,因为我没有使用try-catch语句。但是,我希望try-catch语句在g(y)中计算f(y)时会捕获这个错误,并返回a=“no”和b=“no”。为什么try-catch语句没有发现此错误并按

我已经编写了一个函数,其中包含要计算的子函数列表。我在这个子函数块周围有一个try-catch语句,因此如果其中一个子函数抛出错误,catch语句将确保子函数返回的变量只设置为文本消息

示例子功能(按预期工作)

带有try-catch语句的主函数示例(未按预期工作)

我知道当我使用f(x)时错误是正确的,因为我没有使用try-catch语句。但是,我希望try-catch语句在g(y)中计算f(y)时会捕获这个错误,并返回a=“no”和b=“no”。为什么try-catch语句没有发现此错误并按预期工作

有没有办法让这句话起作用?我需要它以这种方式工作,以避免将try-catch语句放入我编写的所有子函数中。在本例中,只需将try-catch插入f(x)中就很容易了,问题将按照下面的方法解决,但我不想在实际代码中这样做,因为子函数可能会在许多地方失败,我必须对代码进行重大修改,以考虑所有潜在的失败

带有try-catch语句的示例子函数(按预期工作)

主功能示例(按预期工作)

换句话说,我不想在我的第二个例子中使用这个方法,有没有一种方法可以使用类似于我的第一个例子的东西来获得我想要的


我正在使用Julia版本0.4.6

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


“我已经在Julia 0.3、0.4和0.5-dev上试用过,并且在所有这些版本中都有效。请在一个干净的会话中尝试,看看是否可以复制。否则,请提供您正在使用的Julia版本的详细信息


–StefanKarpinski 7月6日4:55“

适合我。你试过在一个干净的REPL会话中复制吗?我在julia0.3、0.4和0.5-dev上试过这个,它在所有的会话中都有效。请尝试在一个干净的会议,看看你是否可以复制。否则,请详细说明您使用的是什么版本的Julia。我在问题的末尾包含了我的版本。我尝试了您的建议并重新启动了repl,它正在工作。我是否应该删除这个问题,因为它可以正常工作?你为什么不把它作为你问题的答案?然后,它可以被标记为已回答,并且很容易被其他人看到。
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
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
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")