2017-11-19 20 views
1

私はループ内で関数を呼び出していますが、この関数は例外をスローする可能性があります。しかし、例外がある場合は無視し、次の反復項目を続行します。今私はtryとexceptを使ってこれを解決しましたが、ここではexceptを除いていくつかの仮説を置いています:自然に動作しますが、コード内にこの例外を無視していることを明示的に示す方法があります。 Nimはそのような機能を提供していますか?例外を自動的に処理する方法は?

+0

あなたがしていることは自然です。 catchメソッドに関する情報をログに記録して、失敗したインスタンスを参照できるようにすることもできます。 –

答えて

1

このコードを明示的にログに記録したり、そのようなエラーを自動的に記録したり、特別なハンドラを呼び出したりする場合は、カスタム処理でその特定のコードをラップするテンプレートを実装できます。例:

proc throwPair(value: int) = 
    if (value mod 2) != 0: 
    echo "Passed for ", value 
    else: 
    raise newException(ArithmeticError, "Bad value") 

template ignoreArithmetic(body: stmt): stmt {.immediate.} = 
    try: body 
    except ArithmeticError: discard 

template ignoreArithmeticAndLog(body: stmt): stmt {.immediate.} = 
    try: body 
    except ArithmeticError: 
    echo "Did ignore arithmetic error!" 

proc tester() = 
    for f in 0..10: 
    ignoreArithmeticAndLog: 
     throwPair f 

tester() 
関連する問題