You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单个CATCH块可捕获try块中的多少个异常?

问题解答

单个CATCH块的异常捕获规则

  • 同一块级作用域下的单个CATCH块,默认只能捕获当前块执行过程中第一个抛出的异常,无法捕获同一段顺序执行代码里的多个异常:异常抛出的瞬间会立刻中断当前块的后续执行流程,直接把控制权转交给对应的CATCH处理块,异常抛出点之后的代码不会运行,自然不会产生后续异常。
    特殊情况:如果在CATCH处理逻辑中调用resume让执行流回到异常抛出点继续向后运行,后续代码执行抛出的新异常会再次触发同一个CATCH块,这种场景下单个CATCH块可以依次捕获多个连续抛出的异常。
  • 不需要为每一种可能的异常类型单独配置独立的CATCH块。单个CATCH块内可以通过when分支匹配不同类型的异常,分别编写处理逻辑即可,完全能覆盖多异常类型的处理需求。

示例代码执行逻辑说明

测试代码如下:

try { CATCH { default { say "seenError"; }; }; die "1"; die "2"; die "3" }
# 运行输出:seenError
  • 本次运行中被捕获的就是第一条die "1"抛出的异常。执行到die "1"时异常立刻触发,后续的die "2"、die "3"根本没有执行机会,不会产生异常。
  • 注意:CATCH块是块级作用域的处理器,不管写在所属块的开头、中间还是结尾,都会捕获整个块执行过程中抛出的异常,和书写位置没有关系。

多异常单独处理的配置要求

不需要为每一个可能抛出异常的语句单独配置独立CATCH块,按实际场景选择方案即可:

  • 如果只是需要按异常类型区分处理逻辑,在同一个CATCH块内编写分支匹配逻辑就足够。
  • 如果需要对不同语句抛出的同类型异常做差异化处理,或者需要前一个异常被处理后继续执行后续语句、抛出后续异常,才需要把对应语句包裹在独立的、自带CATCH处理器的代码块中。

内容的提问来源于stack exchange,提问作者lisprogtor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.12 16:15:51