You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Display full tracebacks when an error occurs asynchronously #51566
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=<Date2012-11-03.14:48:02.931>created_at=<Date2009-11-13.19:23:34.055>labels= ['interpreter-core', 'type-feature', 'library']
title='Display full tracebacks when an error occurs asynchronously'updated_at=<Date2012-11-03.14:48:02.930>user='https://github.com/pitrou'
When an exception is raised in a __del__ method or a finalizer (i.e. a
weakref callback), only the exception name is printed out.
Unfortunately, arbitrarily complex code can be involved which makes
debugging quite tedious. It would be nice to display the full traceback
so that these errors are easier to diagnose (see bpo-7060 as an example).
Seconded.
But such messages are also printed when the interpreter exits, when
poorly written __del__ methods access already disposed modules. Raising
a full traceback could cause users to think that the error is more
severe than it is.
Is there an already existing flag that could control this behaviour?
Otherwise, well, just ignore my remark.
oddthinking commented on Nov 4, 2010
oddthinkingmannequin
Mannequin
More actions
Amaury asks: "Is there an already existing flag that could control this behaviour?"
I wonder if the warnings module could be used.
alonho commented on Oct 15, 2011
alonhomannequin
Mannequin
More actions
Submitting a patch proposing this format:
-----BEGIN UNRAISABLE EXCEPTION-----
Class: AttributeErrorInstance: "'NoneType' object has no attribute 'someattr'"Function: <bound method A.__del__ of <__main__.A object at 0x1007671d0>>
Traceback (most recent call last):
File "/tmp/bla.py", line 4, in __del__None.someattr
-----END UNRAISABLE EXCEPTION
I've wrapped the exception information with header/footer differentiating it from a user's error handling code that also prints tracebacks (is it too much?).
I've considered using the warnings module, But I dislike the suppression of already warned messages. (2 instances will raise exception in __del__ but only one message will be printed)
This is my first patch submission so feel free giving me a hard time.
oddthinking commented on Oct 15, 2011
oddthinkingmannequin
Mannequin
More actions
The formatting isn't very conventional for Python.
Why not use the normal format? i.e.
Traceback (most recent call last):
File "/tmp/bla.py", line 4, in __del__None.someattr
AttributeError: 'NoneType' object has no attribute 'someattr'
Why is this more likely to get confused with user input than other unhandled exceptions?
If you ARE going to deviate, it may be helpful to have it explain why this exception wasn't caught through the normal channels. Maybe the last line could be: "Failed to raise this exception in __del__/finalizer method." or similar.
alonho commented on Oct 15, 2011
alonhomannequin
Mannequin
More actions
Here's the next attempt (took your advice about the convention):
Exception ignored in: <bound method A.__del__ of <__main__.A object at 0x1007671d0>>
Traceback (most recent call last):
File "/tmp/bla.py", line 4, in __del__None.someattr
AttributeError: 'NoneType' object has no attribute 'someattr'
reminder of the current format for comparison:
Exception AttributeError: "'NoneType' object has no attribute 'someattr'" in <bound method A.__del__ of <main.A object at 0x1007671d0>> ignored
I thought about a more elaborate explanation than "Exception ignored" but grepping this function through the code shows it can be called from various places making it too generic.
The reason I wanted to add a header/footer is for stating the message and the traceback go together (I print tracebacks to screen all the time), but it might be TMI..
oddthinking commented on Oct 16, 2011
oddthinkingmannequin
Mannequin
More actions
I wish there was a less instrusive of saying "+1. I'm happy. Thanks." than posting a whole comment, but until then:
+1. I'm happy. Thanks.
(I haven't inspected the code - just based on the description.)
alonho commented on May 12, 2012
alonhomannequin
Mannequin
More actions
how does one get his patch reviewed? (it's been 6 months)
Oops, sorry for the silence, I had forgotten about this issue. I'll take a look at the patch soon.
alonho commented on Oct 31, 2012
alonhomannequin
Mannequin
More actions
Hi Antoine, can you please have a look at the patch? It's been over a year since it's submitted. (-: thanks!
kachayev commented on Nov 3, 2012
kachayevmannequin
Mannequin
More actions
Updated test case for traceback printing, fixed test_cmd_line crashing with new ignored exception message formatting (test was based on regular expression). Patch is attached.
Activity
pitrou commentedon Nov 13, 2009
When an exception is raised in a __del__ method or a finalizer (i.e. a
weakref callback), only the exception name is printed out.
Unfortunately, arbitrarily complex code can be involved which makes
debugging quite tedious. It would be nice to display the full traceback
so that these errors are easier to diagnose (see bpo-7060 as an example).
amauryfa commentedon Dec 1, 2009
Seconded.
But such messages are also printed when the interpreter exits, when
poorly written __del__ methods access already disposed modules. Raising
a full traceback could cause users to think that the error is more
severe than it is.
Is there an already existing flag that could control this behaviour?
Otherwise, well, just ignore my remark.
oddthinking commentedon Nov 4, 2010
Amaury asks: "Is there an already existing flag that could control this behaviour?"
I wonder if the warnings module could be used.
alonho commentedon Oct 15, 2011
Submitting a patch proposing this format:
-----BEGIN UNRAISABLE EXCEPTION-----
I've wrapped the exception information with header/footer differentiating it from a user's error handling code that also prints tracebacks (is it too much?).
I've considered using the warnings module, But I dislike the suppression of already warned messages. (2 instances will raise exception in __del__ but only one message will be printed)
This is my first patch submission so feel free giving me a hard time.
oddthinking commentedon Oct 15, 2011
The formatting isn't very conventional for Python.
Why is this more likely to get confused with user input than other unhandled exceptions?
If you ARE going to deviate, it may be helpful to have it explain why this exception wasn't caught through the normal channels. Maybe the last line could be: "Failed to raise this exception in __del__/finalizer method." or similar.
alonho commentedon Oct 15, 2011
Here's the next attempt (took your advice about the convention):
reminder of the current format for comparison:
Exception AttributeError: "'NoneType' object has no attribute 'someattr'" in <bound method A.__del__ of <main.A object at 0x1007671d0>> ignored
I thought about a more elaborate explanation than "Exception ignored" but grepping this function through the code shows it can be called from various places making it too generic.
The reason I wanted to add a header/footer is for stating the message and the traceback go together (I print tracebacks to screen all the time), but it might be TMI..
oddthinking commentedon Oct 16, 2011
I wish there was a less instrusive of saying "+1. I'm happy. Thanks." than posting a whole comment, but until then:
+1. I'm happy. Thanks.
(I haven't inspected the code - just based on the description.)
alonho commentedon May 12, 2012
how does one get his patch reviewed? (it's been 6 months)
pitrou commentedon Aug 2, 2012
Oops, sorry for the silence, I had forgotten about this issue. I'll take a look at the patch soon.
alonho commentedon Oct 31, 2012
Hi Antoine, can you please have a look at the patch? It's been over a year since it's submitted. (-: thanks!
kachayev commentedon Nov 3, 2012
Updated test case for traceback printing, fixed test_cmd_line crashing with new ignored exception message formatting (test was based on regular expression). Patch is attached.
python-dev commentedon Nov 3, 2012
New changeset a281604a5c9a by Andrew Svetlov in branch 'default':
Issue bpo-7317: Display full tracebacks when an error occurs asynchronously.
http://hg.python.org/cpython/rev/a281604a5c9a
asvetlov commentedon Nov 3, 2012
Committed. Thanks, guys!