如何静默处理异常?
How to silently handle an exception?
我在循环中调用一个函数,这个函数可能会抛出异常。但是当出现异常时我想忽略它并继续下一个迭代项目。现在我已经通过 try and except 解决了这个问题,我在 except: 下放置了一些虚拟语句。它自然有效,但我宁愿有一些明确的方式在代码中指示我忽略了这个异常。 Nim 是否提供这样的功能?
如果您想在代码中明确说明这一点,并可能自动记录此类错误或调用特殊处理程序,您可以实现一个带有自定义处理的模板来包装该特定代码。示例:
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()
我在循环中调用一个函数,这个函数可能会抛出异常。但是当出现异常时我想忽略它并继续下一个迭代项目。现在我已经通过 try and except 解决了这个问题,我在 except: 下放置了一些虚拟语句。它自然有效,但我宁愿有一些明确的方式在代码中指示我忽略了这个异常。 Nim 是否提供这样的功能?
如果您想在代码中明确说明这一点,并可能自动记录此类错误或调用特殊处理程序,您可以实现一个带有自定义处理的模板来包装该特定代码。示例:
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()