當我用非數字輸入測試我的代碼時,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
什麼是你的問題? – sawa