【问题标题】:"exception class/object expected" hash object cannot be rescued in ruby“预期的异常类/对象”哈希对象无法在 ruby​​ 中拯救
【发布时间】:2016-11-12 04:01:00
【问题描述】:
begin
  hash = {"a" => "b"}
  raise hash
rescue Exception => e
  p e.message
end

为什么我没有在结果中得到提升的哈希对象,而是我得到错误 - “异常类/对象预期”

【问题讨论】:

    标签: ruby hash exception-handling


    【解决方案1】:

    这是关于您提出错误的方式的错误。

    当你说raise 时,你需要传递一个“异常类/对象”。

    一些使用内置错误的示例

    raise(StandardError, "my message")
    
    raise ArgumentError, "message"
    
    raise NoMethodError
    

    并创建一个自定义错误类:

    class MyError < StandardError
    end
    
    raise MyError, "message"
    

    【讨论】:

    • 您不能将哈希值提升为字符串。您必须提出一个实际的错误对象,例如StandardError
    • require 'json' begin hash = {"a" => "b"} raise StandardError,hash rescue Exception => e q = e.message p q p q.to_json end 它应该打印 "{\" a\":\"b\"}" 但它会打印 "\"{\\\"a\\\"=>\\\"b\\\"}\""。有什么原因吗?
    • 我不知道,也许发布一个关于它的新问题。
    • 如果您输入puts q.classputs q,您将看到q 是一个包含Ruby 片段的字符串:您放入异常的哈希已转换为字符串表示形式。 p 命令打印您给它的东西,您可以将它们复制粘贴到 Ruby 代码中并获取该特定对象,因此它在两侧添加 " 字符并使用 \" 转义 " 形成的字符哈希的字符串表示的一部分(和 \\ 代表 \ )。如果你想从字符串中返回哈希值,试试 'puts (eval q).class' 和 'puts (eval q)["a"]' 你会发现它给出了 'Hash` 和 b
    猜你喜欢
    • 2013-06-28
    • 1970-01-01
    • 2017-01-30
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多