抛出错误后是否可以从Julia函数返回值?

时间:2019-03-28 12:10:04

标签: julia

我希望既可以抛出两个错误,又可以返回一个值。

所以我尝试的是以下两个,但似乎都不符合我希望他们的行为:

function func()
    try
        error()
    catch e
        throw(e)
    finally
        return 10
    end
end

这将返回10,但不会引发错误。

function func()
    try
        error()
    catch e
        throw(e)
    finally
        10
    end
end

这会引发错误,但不会返回10。

注意: 我得到的结果与第二部分代码相同,而没有使用finally

我想要的是能够调用foo = func(),抛出错误并拥有foo = 10

1 个答案:

答案 0 :(得分:2)

您可能不想这样做。您可能想返回两个值, 如Thilo所述,第二个错误:

function func()
    err = ""
    try
        error()
    catch e
        err = "Error string"
    finally
        10, err
    end
end

foo, errstring = func()

有一种方法可以做您可能不应该做的事情。 将全局变量用于foo,并在函数中分配给全局变量 而不是通过返回值,例如:

foo = 2

function func()
    global foo = 10
    try
        error()
    catch e
        throw(e)
    finally
        10
    end
end


function thrower()
    try
        func()
    catch
        println("foo = $foo")
    end
end

thrower()