Nick Coghlan added the comment:

On Sun, Dec 9, 2012 at 2:59 AM, Ethan Furman <rep...@bugs.python.org> wrote:

>
> Ethan Furman added the comment:
>
> There is one typo and one error in the first paragraph of the patch:
>
> > When raising a new exception (rather than
> > using to bare ``raise`` to re-raise the
>          ^ should be an 'a'
>

Fixed.

> > Setting :attr:`__cause__` also implicitly sets
> > the :attr:`__suppress_context__` attribute to ``True``.
>
> The last sentence is incorrect -- __suppress_context__ is only set to True
> if __cause__ is set to None; if __cause__ is set to any other exception
> __suppress_context__ remains False and the new exception chain will be
> printed:
>
> >>> try:
> ...   raise ValueError
> ... except:
> ...   raise NameError from KeyError
> ...
> KeyError
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
>   File "<stdin>", line 4, in <module>
> NameError
>

Not true: __suppress_context__ is always set as a side effect of setting
__cause__ (it's built into the setter for the __cause__ descriptor). What
you're seeing in the traceback above is the explicit cause, not the
implicit context.

>>> e = Exception()
>>> e.__cause__ = Exception()
>>> e.__suppress_context__
True

The only mechanism we offer to suppress an explicit __cause__ is setting
__cause__ to None.

Cheers,
Nick.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue15209>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to