Skip to content
/ django Public

Fixed #25761 -- Re-raised exceptions need __cause__.__traceback__#5721

Closed
rhertzog wants to merge 1 commit intodjango:masterfrom
rhertzog:ticket_25761
Closed

Fixed #25761 -- Re-raised exceptions need __cause__.__traceback__#5721
rhertzog wants to merge 1 commit intodjango:masterfrom
rhertzog:ticket_25761

Conversation

@rhertzog
Copy link
Contributor

When Django re-raises an exception, it sets the cause attribute even
in Python 2, thus mimicking Python's 3 behaviour for "raise Foo from Bar".
However Python 3 also ensures that all exceptions have a traceback
attribute and thus the "traceback2" Python 2 module (backport of Python
3's "traceback" module) relies on the fact that whenever you have a
cause attribute, the recorded exception also has a traceback
attribute.

This is breaking at least testtools which is using traceback2 (see
testing-cabal/testtools#162).

This commit fixes this inconsistency by ensuring that Django sets
the traceback attribute on any exception stored in a cause
attribute of a re-raised exception.

When Django re-raises an exception, it sets the __cause__ attribute even
in Python 2, thus mimicking Python's 3 behaviour for "raise Foo from Bar".
However Python 3 also ensures that all exceptions have a __traceback__
attribute and thus the "traceback2" Python 2 module (backport of Python
3's "traceback" module) relies on the fact that whenever you have a
__cause__ attribute, the recorded exception also has a __traceback__
attribute.

This is breaking at least testtools which is using traceback2 (see
testing-cabal/testtools#162).

This commit fixes this inconsistency by ensuring that Django sets
the __traceback__ attribute on any exception stored in a __cause__
attribute of a re-raised exception.
@timgraham
Copy link
Member

merged in 9f4e031, thanks!

@timgraham timgraham closed this Dec 3, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants