【发布时间】:2015-09-22 00:40:04
【问题描述】:
当我使用非数字输入测试我的代码时,Ruby 会引发一条默认消息。相反,每当引发异常时,我希望我的自定义消息使用默认的backtrace.inspect 打印。我期望:
"oops... That was not a number"
被提升而不是:
invalid value for Float(): "h\n" (ArgumentError)
受以下文档的启发,我编写了以下代码: stackoverflow, rubylearning, github.
class MyCustomError < StandardError
def message
"oops... That was not a number"
end
end
def print_a_number
begin
puts "chose a number"
number = Float(gets)
raise MyCustomError unless number.is_a? Numeric
puts "The number you chose is #{number}"
rescue MyCustomError => err
puts err.message
puts err.backtrace.inspect
end
end
以下代码的行为确实符合我的预期;我不明白为什么下面的代码会打印我的默认消息,而上面的代码却没有:
class MyCustomError < StandardError
def message
"The file you want to open does not exist"
end
end
def open_a_file
begin
puts "What file do you want to open?"
file2open = gets.chomp
raise MyCustomError unless File.file?(file2open)
File.open(file2open, 'r') { |x|
while line = x.gets
puts line
end
}
rescue MyCustomError => err
puts err.message
puts err.backtrace.inspect
end
end
【问题讨论】:
-
你有什么问题?