【问题标题】:How can I catch Zlib::BufError in my Ruby on Rails code?如何在我的 Ruby on Rails 代码中捕获 Zlib::BufError?
【发布时间】:2015-12-28 11:31:05
【问题描述】:

我已经使用 Rails 构建了一个应用程序。我有大量地址,我正在使用 Geocoder 通过 Bing/Google API 对其进行标准化。这是我目前获取地址信息的电话:

Geocoder.search(address)

这工作得很好,我可以解析响应 JSON。但是,当我让脚本运行时,它有时会出现以下错误:

Zlib::BufError: buffer error

我不想让脚本崩溃,而是想捕捉这个错误并继续执行脚本。我怎么能用 Ruby 做到这一点?我不确定要捕获哪个异常(如果有)。

【问题讨论】:

  • 什么意思,你不知道异常? Zlib::BufError 是个例外。
  • 我尝试了救援 Zlib::BufError 并且它一直告诉我这是一个未知错误。我认为这也是,但得到了那个未知的错误。我会再试一次,看看为什么会这样。感谢您的回复。
  • “未知错误”是什么意思?
  • 我没有确切的信息,但它与“未定义的异常 zlib:buferror”类似,我可能有错字。我已经添加了 begin rescue 回来看看会发生什么。
  • 这里有点不对劲。这是 zlib 返回 Z_BUF_ERROR 的报告。这意味着inflate()deflate() 的特定调用由于没有任何输入或没有任何输出空间而无法取得任何进展。这个错误不是致命的。您始终可以通过提供更多输入或更多输出空间来继续。所以有些东西应该尝试继续下去,你不应该得到这个错误,除非它被用来表示别的东西。例如。正在解码的不完整 zlib 流。

标签: ruby-on-rails ruby exception zlib


【解决方案1】:

为确保Zlib 可用,您需要在要捕获错误的文件中添加require 'zlib'。它看起来不像 Geocoder 已将其声明为任何地方的依赖项,因此在评估您的 rescue 行时可能不会加载它。

require 'zlib'

begin
  Geocoder.search('110 William St, 28th Floor New York, NY 10038')
rescue Zlib::BufError => boom
  puts 'Stack Overflow appears to have moved.'
end

【讨论】:

  • 就是这样。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2010-09-13
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多