In your example ex
is an instance of on exception, and will not give expected results when comparing to the class itself with the ==
operator, which is a Class
object. You need to check the error's class against the actual class object.
# A NameError or an error that is a subclass of NameError
ex.is_a?(NameError)
ex.kind_of?(NameError)
# NameError ONLY, not even sub-classes of NameError
ex.instance_of?(NameError)
There are numerous other ways you could check, though the previous methods I outlined are the most commonly used, and typically "preferred" way. Although equality could still be used on the classes, it is typically not the suggested way to achieve it, as it is less flexible, and less clear on the underlying intention, where the above examples indicate exactly how you would like to handle subclasses of the specified error.
ex.class == NameError
I found this answer that explains the subtle differences pretty well.