[ruby-core:77391] [Ruby trunk Bug#12588] When an exception is re-raised in the "rescue" clause, the back trace does not contain the line in that clause

From: asari.ruby@...
Date: 2016-09-26 00:56:03 UTC
List: ruby-core #77391
Issue #12588 has been updated by Hiro Asari.


The current stacktrace is misleading. Without line 4 in it, the implication is that the exception was found on line 2, and was not caught by `rescue`. In this simple case, the stack trace should contain lines `[4,7]`, not `[2,7]`.

I am not sure how I can use `Exception#cause`. I tried:

~~~
$ cat -n foo.rb
     1  def foo
     2    raise StandardError
     3  rescue StandardError => e
     4    puts e.cause.class
     5    raise e.cause
     6  end
     7
     8  foo
$ ruby -v foo.rb
ruby 2.4.0dev (2016-09-21 trunk 56200) [x86_64-darwin15]
NilClass
foo.rb:5:in `raise': exception object expected (TypeError)
        from foo.rb:5:in `rescue in foo'
        from foo.rb:2:in `foo'
        from foo.rb:8:in `<main>'
~~~

----------------------------------------
Bug #12588: When an exception is re-raised in the "rescue" clause, the back trace does not contain the line in that clause
https://bugs.ruby-lang.org/issues/12588#change-60644

* Author: Hiro Asari
* Status: Rejected
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-darwin14]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
Given:

~~~
$ cat -n foo.rb 
     1  def foo
     2    raise StandardError
     3  rescue StandardError => e
     4    raise e
     5  end
     6
     7  foo
~~~

one would reasonably expect to see line 4 to be in the back trace when this file is executed, but one does not.

~~~
$ ruby -v foo.rb
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-darwin14]
foo.rb:2:in `foo': StandardError (StandardError)
        from foo.rb:7:in `<main>'
~~~




-- 
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>

In This Thread

Prev Next