TypeError: no implicit conversion of Capybara::ElementNotFound into String
TypeError: no implicit conversion of Capybara::ElementNotFound into String
我有一些非常基本的代码:
def select_author_name(comment)
selector = 'span.name'
comment.find(selector).text
rescue Capybara::ElementNotFound => e
Rails.logger.warn('Could not get author_name: ' + e)
puts e
''
end
当我 运行 这段代码并成功挽救 Capybara::ElementNotFound
错误时,它会爆炸并出现以下错误:
TypeError: no implicit conversion of Capybara::ElementNotFound into String
奇怪的是puts e
行会打印出错误没问题
我的问题是:
当我可以用 puts
成功打印出 e
时,为什么连接尝试会导致打印 e
出现问题?两者不会导致 .to_s
暗中调用吗?
Ruby 在连接字符串时实际上使用隐式 #to_str
方法,而不是 #to_s
.
在这种情况下,最简单的解决方案可能是将您的代码更改为:
Rails.logger.warn('Could not get author_name: ' + e.to_s)
如果你出于某种原因想要避免这种情况,并且希望所有错误对象在将来进行字符串连接时都按照你的预期运行,你也可以打开 StandardError
class并定义 to_str
:
class StandardError
def to_str
self.to_s
end
end
我有一些非常基本的代码:
def select_author_name(comment)
selector = 'span.name'
comment.find(selector).text
rescue Capybara::ElementNotFound => e
Rails.logger.warn('Could not get author_name: ' + e)
puts e
''
end
当我 运行 这段代码并成功挽救 Capybara::ElementNotFound
错误时,它会爆炸并出现以下错误:
TypeError: no implicit conversion of Capybara::ElementNotFound into String
奇怪的是puts e
行会打印出错误没问题
我的问题是:
当我可以用 puts
成功打印出 e
时,为什么连接尝试会导致打印 e
出现问题?两者不会导致 .to_s
暗中调用吗?
Ruby 在连接字符串时实际上使用隐式 #to_str
方法,而不是 #to_s
.
在这种情况下,最简单的解决方案可能是将您的代码更改为:
Rails.logger.warn('Could not get author_name: ' + e.to_s)
如果你出于某种原因想要避免这种情况,并且希望所有错误对象在将来进行字符串连接时都按照你的预期运行,你也可以打开 StandardError
class并定义 to_str
:
class StandardError
def to_str
self.to_s
end
end