[Python-Dev] Revert #12085 fix for __del__ attribute error message

Antoine Pitrou solipsis at pitrou.net
Mon Sep 23 23:35:07 CEST 2013


On Tue, 24 Sep 2013 07:19:14 +1000
Nick Coghlan <ncoghlan at gmail.com> wrote:
> On 24 Sep 2013 01:24, "Antoine Pitrou" <solipsis at pitrou.net> wrote:
> >
> > On Mon, 23 Sep 2013 18:51:04 +1000
> > Nick Coghlan <ncoghlan at gmail.com> wrote:
> > > On 23 September 2013 18:45, Antoine Pitrou <solipsis at pitrou.net> wrote:
> > > > Le Mon, 23 Sep 2013 18:17:51 +1000,
> > > > Nick Coghlan <ncoghlan at gmail.com> a écrit :
> > > >>
> > > >> Here's what I suggest changing that error to:
> > > >>
> > > >> >>> del x
> > > >> Unraisable exception suppressed when calling <bound method C.__del__
> > > >> of <__main__.C object at 0x7f98b8b61538>>
> > > >> Traceback (most recent call last):
> > > >>   File "<stdin>", line 3, in __del__
> > > >> RuntimeError: Going away now
> > > >
> > > > Why not simply "Exception automatically caught in <bound method
> > > > C.__del__> [...]" ?
> > >
> > > It only answers the "what" (i.e. the exception was automatically
> > > caught), without addressing the "why" (i.e. because there wasn't
> > > anything else useful the interpreter could do with it)
> >
> > Yes, but I agree with Greg that "unraisable" is wrong. After all, it
> > was raised, and it can even be caught by the programmer (inside
> > __del__).
> 
> The word doesn't literally mean the exception itself was unraisable. It
> means it was raised, we caught it and we're writing it to stderr because we
> *can't raise it again*.

But that's because you already know what it's supposed to convey. The
average user doesn't, and only sees "unraisable".

> The relevant C API function is just called "PyErr_WriteUnraisable", not
> "PyErr_WriteUnraisableButThatIsTechnicallyWrongSinceItWasAlreadyRaisedAndWeJustCaughtItAndAreNowReportingItToStdErr".

"PyErr_WriteUnraisable" is right at the point where it used: I can't
raise that exception at this point, therefore I call
PyErr_WriteUnraisable. However, from the point of view of the user
reading the traceback, the exception *was* raised.

Regards

Antoine.


More information about the Python-Dev mailing list