Try语句

try 语句处理异常:

  1. from strutils import parseInt
  2.  
  3. # 读取应包含数字的文本文件的前两行并尝试添加
  4. var
  5. f: File
  6. if open(f, "numbers.txt"):
  7. try:
  8. let a = readLine(f)
  9. let b = readLine(f)
  10. echo "sum: ", parseInt(a) + parseInt(b)
  11. except OverflowError:
  12. echo "overflow!"
  13. except ValueError:
  14. echo "could not convert string to integer"
  15. except IOError:
  16. echo "IO error!"
  17. except:
  18. echo "Unknown exception!"
  19. # reraise the unknown exception:
  20. raise
  21. finally:
  22. close(f)

除非引发异常,否则执行 try 之后的语句。然后执行适当的 except 部分。

如果存在未明确列出的异常,则执行空的 except 部分。它类似于 if 语句中的 else 部分。

如果有一个 finally 部分,它总是在异常处理程序之后执行。

except 部分中 消耗 异常。如果未处理异常,则通过调用堆栈传播该异常。这意味着程序的其余部分 - 不在 finally 子句中 - 通常不会被执行(如果发生异常)。

  • 如果你需要*访问 except 分支中的实际异常对象或消息,你可以使用来自 system 模块的 getCurrentException()
  • getCurrentExceptionMsg() 的过程。例:
  • .. code-block:: nim
    • try:
    • doSomethingHere()
    • except:
      • let
      • e = getCurrentException() msg = getCurrentExceptionMsg()echo "Got exception ", repr(e), " with message ", msg