首页 > 解决方案 > 我的 Rubocop 不喜欢 Ruby 错误处理中的 => e。不是 => e 标准吗?

问题描述

Rubocop 似乎不喜欢我处理错误的方式。我应该怎么办?

Lint/UselessAssignment: Useless assignment to variable - e.
    rescue *exceptions_list => e

它适用于以下代码:

  def get_request(url_args = {})
    http_connection(url_builder(url_args[:url], url_args[:page]))
  rescue *exceptions_list => e
    raise "#{e.message}"
  end

您在*exceptions_list那里看到的是在私有方法中定义的:

  private

    def exceptions_list
      [
        Net::HTTPBadResponse,
        Net::HTTPHeaderSyntaxError,
        Net::ProtocolError,
        Errno::ECONNRESET,
        Errno::EINVAL,
        Timeout::Error,
        EOFError,
        SocketError
      ]
    end

避免救援线过长。

问题:拥有=> e是错误处理的标准,不是吗?我应该怎么办?

非常感谢您!=)

标签: rubyerror-handlingcoding-stylerubocop

解决方案


您的示例没有Lint/UselessAssignment从 rubocop 给出,至少没有给出版本0.55.0

UselessAssignment 通常来自以下内容:

def do_things
  ..
rescue *exception_list => e # Useless assignment, e is never used in the block below.
  puts "it failed :("
end

要解决此问题,如果您没有将引发的异常用于任何事情,则可以删除分配:

def do_things
  ..
rescue *exception_list
  puts "it failed and i don't care why :D"
end

推荐阅读