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