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

时间:2011-11-18 08:47:03

标签: ruby

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

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

我的$!.to_s()包含如下puts之类的大字符串:

puts $!.to_s() 

puts语句之前输出以上if

myException \n
th sdfsj dsjhf sdfj \n
asdj jkds fdf j

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

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

2 个答案:

答案 0 :(得分:9)

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

class MyException < StandardError; end

将定义一个可以通过

进行拯救的新例外
begin
  do_something_that_raises_expected_exception
rescue MyException
  do_something_else
end

所以你不需要任何字符串比较。

如果你想走在路上,请使用string.match exception_name,但我建议反对。

关于拯救的另一个词:如果可能的话,不要rescue Exception,只需使用rescue,因为Exception也会捕获SyntaxError之类的东西(很可能不会意)。对于ruby中的流量控制而言,例外情况不赞成,而不是python

答案 1 :(得分:3)

虽然我完全赞同Tass,但您可以通过以下方式实现目标:

if $!.to_s !~ /\AmyException\s*\n/
  ...

if $!.to_s.lines.first != "myException \n"
  ...

但请:不要那样做。