如何静默处理异常?

时间:2017-11-19 08:03:05

标签: nim

我在循环中调用一个函数,这个函数可以抛出异常。但是当有异常时我想忽略它并继续下一个迭代项。现在我已经通过尝试解决了这个问题,除了,我已经在下面放了一些虚拟声明:它很自然地工作,但我宁愿在代码中有一些明确的方式表明我忽略了这个异常。 Nim是否提供此类功能?

1 个答案:

答案 0 :(得分: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()