Project

General

Profile

Feature #14685

IRB doesn't print exception cause

Added by RubyBugs (A Nonymous) about 2 years ago. Updated about 2 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:86529]

Description

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:

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:

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?

Also available in: Atom PDF