我有一个救援区,它会检查是否抛出了正确的异常,如下所示:
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()
输出的第一行和双引号中的字符串。
有任何建议如何解决这个问题?
答案 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"
...
但请:不要那样做。