2016-07-06 7 views
0

評価するサブ関数のリストを含む関数を書いた。私は、サブ関数のこのブロックの周りにtry-catchステートメントを持っているので、それらのうちの1つがエラーをスローすると、catchステートメントはサブ関数が返す変数がテキストメッセージに設定されるようにします。JuliaすべてのエラーをキャッチしないCatch文を試す

例サブ関数は(期待どおりに動作し)

私はFを使用するときにエラーが正確であることを理解し

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 

のtry-catchステートメント(期待通りに動作していない)と

例主な機能(x)try-catch文を使用していないためです。しかし、私は、f(y)がg(y)の内部で評価され、a = "no"とb = "no"を返すときにtry-catch文がこのエラーをキャッチすることを期待しています。 try-catch文がこのエラーを選択せず​​、期待どおりに動作しないのはなぜですか?

このステートメントを動作させる方法はありますか?私が書いた多くのサブ関数のすべてにtry-catchステートメントを入れるのを避けるために、このように動作する必要があります。この例では、try-catchをf(x)に挿入するのは簡単で、問題は以下のように解決されますが、サブ関数が数値で失敗する可能性があるため、私は実際のコードでこれをしたくありません潜在的な障害のすべてを考慮に入れてコードを大幅に変更する必要があります。 try-catchステートメントで

例サブ関数は、言い換えれば

function i(y) 
    a=h(y) 
    b="works" 
    return a,b 
end 

i(9) 
> (3.0,"works") 

i(-9) 
> ("no","works") 

を(期待通りに働い)

function h(x) 
    SQRT = [] 
    try 
     SQRT = sqrt(x) 
    catch 
     SQRT = "no" 
    end 
    return SQRT 
end 
h(9) 
> 3.0 

h(-9) 
> "no" 

例主な機能を(期待通りに働いて)、私はする必要がありますする必要はありません私の2番目の例のメソッドを使用して、私の最初の例に似た何かを使用したいものを得る方法はありますか?

私が働いていたREPLセッションの再起動を示唆するためにジュリアバージョン0.4.6

+1

作品で。きれいなREPLセッションで再現しようとしましたか? –

+2

私はJulia 0.3、0.4、0.5-devでこれを試してみました。クリーンセッションで試してみて、再現できるかどうか確認してください。それ以外の場合は、使用しているJuliaのバージョンをお知らせください。 – StefanKarpinski

+2

質問の最後に私のバージョンを含めました。私はあなたが提案したものを試して、replを再起動し、それが動作しています。この質問は、それが正常に機能するので削除する必要がありますか? – lara

答えて

1

おかげStefanKarpinskiを使用しています。

"Julia 0.3、0.4、0.5-devでこれを試してみましたが、すべてで動作します。ジュリアあなたのバージョンが使用している

を - 。StefanKarpinski 7月6日4時55" 分、私にとって

関連する問題