Issue #14685 has been updated by RubyBugs (A Nonymous).


Note that per @Hanmac above in comment #2, separate work might be necessary to also print the `#cause` in default Ruby uncaught exception print out. But that is not the subject of this issue.

Hanmac -- should I open a separate issue to cover the printing of `#cause` in Ruby uncaught exceptions, as a separate issue from IRB?

RubyBugs (A Nonymous) wrote:
> May I ask: a very quick path to solving this would be for me (or someone else) to turn my workaround monkey-patch of IRB (see comment #1 above) into a pull request to IRB in the standard library.
> 
> Ruby maintainers: are you interested in receiving such a PR? We can take that on if there is interest in reviewing it.


----------------------------------------
Feature #14685: IRB doesn't print exception cause
https://bugs.ruby-lang.org/issues/14685#change-71484

* Author: RubyBugs (A Nonymous)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
# Summary

IRB doesn't print `Exception#cause`. 

Because IRB also doesn't offer access to raised exceptions (see https://bugs.ruby-lang.org/issues/14684), in effect this make the `#cause` of exceptions inaccessible without extra work and tooling at the console

## Details

Consider the following IRB session:

~~~ ruby
def method_raises_exception_with_cause
  1/0
rescue StandardError => e
  raise "An exception with a cause"
end

method_raises_exception_with_cause

#RuntimeError: An exception with a cause
#	from (irb):4:in `rescue in method_raises_exception_with_cause'
#	from (irb):2:in `method_raises_exception_with_cause'
#	from (irb):7
#	from /Users/marcsiegel/.rubies/ruby-2.3.4/bin/irb:11:in `<main>'
~~~

### Expected

In order to work with the `#cause` feature in recent Rubies, which is generally accepted Ruby practice today, we expect to see the `#cause` printed at the console. In fact, we would expect it to be recursively printed if there were a series of linked causes. For example:

~~~ ruby
method_raises_exception_with_cause

# One could imagine seeing printed from IRB:

#RuntimeError: An exception with a cause
#	from (irb):4:in `rescue in method_raises_exception_with_cause'
#	from (irb):2:in `method_raises_exception_with_cause'
#	from (irb):7
#	from /Users/marcsiegel/.rubies/ruby-2.3.4/bin/irb:11:in `<main>'
#Caused by: ZeroDivisionError: divided by 0
#	from (irb):3:in `/'
#	from (irb):2:in `method_raises_exception_with_cause'
#	from (irb):7
#	from /Users/marcsiegel/.rubies/ruby-2.3.4/bin/irb:11:in `<main>'
~~~

### Discussion

Ruby nested exceptions via `#cause` are a stable and accepted part of the Ruby landscape. All major Ruby tooling we are aware of, including production services such as BugSnag and AirBrake, as well as IDEs such as RubyMine, support the `#cause` mechanism for conveying nested exception contexts.

It is surprising that IRB does not. Would this be a big challenge to change?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>