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

如何解决begin/rescue无法捕获CombinePdf::ParsingError异常的问题

异常捕获不生效的核心原因

ParsingError是CombinePdf库定义在自身命名空间下的异常类,完整类路径为CombinePdf::ParsingError。你当前代码直接写裸的ParsingError,Ruby只会在当前上下文的作用域里查找同名异常类,无法匹配到实际抛出的CombinePdf下的异常,所以捕获逻辑不会触发。

正确实现代码

只需要在rescue后写全异常的完整类名即可:

begin
  FileManager::PdfValidation.new(uploaded_files)
rescue CombinePdf::ParsingError => e
  # 按需添加处理逻辑,比如记录日志、返回友好提示
  Rails.logger.warn "拦截不支持的可选内容PDF,原因:#{e.message}"
end
排查验证技巧

如果修改后还是没命中捕获,可以临时加一层通用异常打印,确认实际抛出的异常类名:

begin
  FileManager::PdfValidation.new(uploaded_files)
rescue => e
  # 控制台会输出实际抛出异常的完整类名,核对后替换成对应类即可
  puts "异常类名:#{e.class.name},异常信息:#{e.message}"
end

注意:不要长期保留无差别捕获所有异常的代码,会吞掉其他意料之外的代码错误,只需要保留你明确要跳过的CombinePdf::ParsingError捕获逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:21:31