尝试访问数组中的项目时 nil:NilClass 的未定义方法“[]”

undefined method `[]' for nil:NilClass when trying to access items in an array

我无法访问此数组中的项目,我不确定为什么。

我正在使用名为 FastImage 的 Gem,它获取图像 URL 和 return 其属性来抓取网页,return 它找到的所有图像的宽度和高度。

- url = open("http://google.com/").read

- imgs = URI.extract(url).select{|img| img[/\.(?:png|jpe?g)\b/]}.each do |img|  
  = FastImage.size(img)

这将打印每个相应数组中的维度,但试图通过其索引访问项目并出现 [] returns 上述错误。

如果img不是有效的URL图像,FastImage.size(img)returnsnilFastImage.size(img)[0] 会抛出错误。

如果你在Ruby 2.3,你可以写成FastImage.size(img)&.[](0),但它很难看。对于任何 Ruby,您可以这样做:

= size = FastImage.size(img) and size[0]

无论哪种情况,更好的正则表达式都应该减少误报,从而减少不必要的 HTTP 请求。一件简单的事情可能是用 $ 替换 \b,因为扩展实际上应该是 URL 中的最后一件事(除非你有奇怪的缓存破坏 URL 之类的foo.jpeg?q=276747622).