Except 子句

在 except 子句中,可使用下面的语法访问当前抛出的异常:

  1. try:
  2. # ...
  3. except IOError as e:
  4. # 现在可以使用 "e"
  5. echo "I/O error: " & e.msg

或者使用 getCurrentException 获取当前抛出的异常。

  1. try:
  2. # ...
  3. except IOError:
  4. let e = getCurrentException()
  5. # 现在可以使用 "e"

注意,getCurrentException 总是返回 ref Exception 类型。如果需要使用具体类型(比如上面例子中的 IOError)的变量,则需要显式转换:

  1. try:
  2. # ...
  3. except IOError:
  4. let e = (ref IOError)(getCurrentException())
  5. # 现在 "e" 是具体的异常类型了

但是这种需求很少见。最常见的使用场景是从 e 中提取错误信息,使用 getCurrentExceptionMsg 已经足够了:

  1. try:
  2. # ...
  3. except CatchableError:
  4. echo getCurrentExceptionMsg()