From: duerst@... Date: 2016-06-16T04:18:30+00:00 Subject: [ruby-core:76045] [Ruby trunk Feature#12482] ArgumentError.new(nil) should give a better description Issue #12482 has been updated by Martin D��rst. Eike Dierks wrote: > OK, that change would break the spec. > I do understand that breaking the spec something that we rarely want to do. It's not just that it formally breaks the spec. The documentation says that Exceptions take a *message* as an argument. This essentially means that it's the caller's responsibility to make sure the output is understandable. Nil is not a message. Ruby is so kind as to stringify 'messages' that are not strings. Stringification of *nil* is "", so that is what you end up with. > I found a workaround: > ArgumentError.new([arg]) # wrap arg in Array to give a better error message when arg is nil > works for me. What about ArgumentError.new("nil") ? That would be clearer. But in general, even that isn't very helpful, something like ArgumentError.new("Got nil, but expected ...") would be much more helpful. ---------------------------------------- Feature #12482: ArgumentError.new(nil) should give a better description https://bugs.ruby-lang.org/issues/12482#change-59248 * Author: Eike Dierks * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Currently: ~~~ruby ArgumentError.new(nil) => # ArgumentError.new(nil).to_s => "ArgumentError" ArgumentError.new(nil).inspect => "#" ~~~ I want to suggest to change this to "ArgumentError(nil)" instead. Rational: For testing arguments, I frequently use: ~~~ruby raise ArgumentError.new(arg) unless ExpectedClass === arg ~~~ However when arg is nil, this raises "ArgumentError" while raising "ArgumentError(nil)" would be much nicer. This would differentiate between `ArgumentError.new()` and `ArgumentError.new(nil)` Suggested changes It looks like `ArgumentError#initialize` inherits Exception#initialize I'd like to suggest to differentiate between Exception.new() and Exception.new(nil) ~~~ruby def Exception.new(msg = :__Exception_msg_arg_undefined___) case arg when :__Exception_msg_arg_undefined___ # msg = "ClassName" when nil # msg = "ClassName(nil)" end ~~~ Impact I believe this should not break existing code as no code should rely on the string returned. -- https://bugs.ruby-lang.org/ Unsubscribe: