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

Ruby如何捕获圆括号/方括号/大括号不匹配导致的异常

根因分析

Ruby 默认的无参rescue(包括行内简写的rescue)仅捕获StandardError及其子类异常,而公式缺少右括号触发的SyntaxError属于Exception的直接子类,不在默认捕获范围内,因此不会进入异常分支。

修复方案

显式指定需要捕获的异常类型,将SyntaxError加入捕获列表即可解决该问题。如果需要同时兼容其他异常场景,也可根据需求扩展捕获范围(当前公式校验场景属于可控范围,不会误拦截严重系统异常)。

修正后可正常运行的Ruby代码:

def SUM a,b
    a + b
end

# 读取第一行的输入条数
gets
puts $<.map do |line|
  # 仅匹配开头的等号,避免误删公式内部的等号
  next "INVALID" unless line.start_with?('=')
  begin
    eval(line.delete_prefix('='))
  # 同时捕获运行时错误和语法错误
  rescue StandardError, SyntaxError
    "INVALID"
  end
end

其他兼容优化

你可以根据需求增加额外适配逻辑:

  • 如果需要支持大小写不敏感的SUM调用(比如匹配输入2中的SuM写法),可以在eval前将公式中的函数名统一转为大写,或者提前定义SUM的大小写别名
  • 原来的tr(?=,'')写法会删除字符串中所有等号,如果公式内包含等号判断逻辑会出错,替换为delete_prefix('=')仅删除开头的等号更安全
  • 原代码返回符号:INVALID,输出时会自动转字符串,统一直接返回字符串"INVALID"更符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:54:01