问题
When I run the following, rescue seems to be ignored for ArgumentError. The ArgumentError error message from Ruby appears on the console, but my puts message does not. I tried rescue with TypeError and ZeroDivisionError, and it worked.
def divide(a, b)
begin
a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s
rescue ArgumentError
puts 'there must be two arguments'
end
end
divide(4)
回答1:
The exception is not thrown inside the function, but at the point where it is called, so you need to catch it somewhere else:
def divide(a, b)
a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s
end
begin
divide(4)
rescue ArgumentError
puts 'there must be two arguments'
end
While that works, catching ArgumentError
is a very bad idea, as it indicates an error in your code which you shouldn't be able to recover from.
回答2:
The rescue-ing will be done for this part of code : a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s
. Your exception is triggered not in the method, but at calling-time, if you see what I mean.
来源:https://stackoverflow.com/questions/10692860/ruby-ignores-rescue-argumenterror