Ruby Exception.to_s与期望的字符串不匹配

BSa*_*nke 1 ruby

我有一个救援块,它检查是否抛出了正确的异常,如下所示:

rescue Exception
      if $!.to_s() != "myException"
        Err("Unexpected error :" + $!)
      end
      else
        Err("No error") 
Run Code Online (Sandbox Code Playgroud)

$!.to_s()当我puts喜欢时,我包含如下大字符串:

puts $!.to_s() 
Run Code Online (Sandbox Code Playgroud)

上述声明puts之前的输出if是:

myException \n
th sdfsj dsjhf sdfj \n
asdj jkds fdf j
Run Code Online (Sandbox Code Playgroud)

所以在if声明中我想比较输出中的第一行$!.to_s()和双引号中的字符串.

有任何建议如何解决这个问题?

Rea*_*onk 9

这让我的眼睛受伤.请在ruby中进行面向对象的编程.

class MyException < StandardError; end
Run Code Online (Sandbox Code Playgroud)

将定义一个你可以拯救的新例外

begin
  do_something_that_raises_expected_exception
rescue MyException
  do_something_else
end
Run Code Online (Sandbox Code Playgroud)

所以你不需要任何String比较.

如果你想走在路上,请使用string.match exception_name,但我建议不要这样做.

关于救援的另一个词:rescue Exception如果可能的话,不要做,只是使用rescue,因为Exception捕获类似的东西SyntaxError(这可能不是意图).对于流量控制而言,例外情况ruby不赞成,而不是python.