You need to enable JavaScript to run this app. 为何_test函数最终返回finaly?我们不是已捕获抛出的错误吗?
优惠活动
大模型
产品
解决方案
定价
更多

为何_test函数最终返回finaly?我们不是已捕获抛出的错误吗?

核心执行规则

出现这种返回结果是编程语言的明确语法规则决定的,和catch块是否成功捕获错误没有直接关联。

对应的测试示例代码:

String _test(){
  try {
    throw Exception('error');
  } catch (e) {
    return 'catch';
  } finally {
    return 'finaly';
  }
}
逐行执行流程拆解
  • 程序进入try块,执行到throw Exception('error')时直接抛出异常,中断try块内的后续代码执行
  • 抛出的异常被catch (e)块成功捕获,进入catch块执行return 'catch':此时程序不会立刻将'catch'作为最终结果返回,只会将这个值暂存为待返回值,按照语法规则强制执行完关联的finally块后才会真正退出函数
  • 进入finally块执行到return 'finaly':该return语句会直接覆盖之前所有暂存的待返回值,将'finaly'作为函数的最终返回值直接退出,不再理会catch块暂存的返回结果
关键认知澄清
  • finally块的return语句拥有最高返回优先级:哪怕是try块正常执行完毕的return、catch块捕获异常后的return,只要finally块中存在return语句,都会被finally的返回值覆盖
  • 在finally块中写return属于典型的不良实践:不仅会制造反直觉的返回逻辑,还会直接吞掉本该向上抛出的未处理异常、覆盖正常的错误返回逻辑,绝大多数代码静态检查工具都会对这类写法发出警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 03:45:03