Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Display full tracebacks when an error occurs asynchronously #51566

Closed
pitrou opened this issue Nov 13, 2009 · 13 comments
Closed

Display full tracebacks when an error occurs asynchronously #51566

pitrou opened this issue Nov 13, 2009 · 13 comments
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) stdlib Python modules in the Lib dir type-feature A feature request or enhancement

Comments

@pitrou
Copy link
Member

pitrou commented Nov 13, 2009

BPO 7317
Nosy @amauryfa, @pitrou, @ezio-melotti, @asvetlov, @vadmium
Files
  • 7317.patch
  • 7317.patch
  • issue7317.diff
  • 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 = None
    closed_at = <Date 2012-11-03.14:48:02.931>
    created_at = <Date 2009-11-13.19:23:34.055>
    labels = ['interpreter-core', 'type-feature', 'library']
    title = 'Display full tracebacks when an error occurs asynchronously'
    updated_at = <Date 2012-11-03.14:48:02.930>
    user = 'https://github.com/pitrou'

    bugs.python.org fields:

    activity = <Date 2012-11-03.14:48:02.930>
    actor = 'asvetlov'
    assignee = 'none'
    closed = True
    closed_date = <Date 2012-11-03.14:48:02.931>
    closer = 'asvetlov'
    components = ['Interpreter Core', 'Library (Lib)']
    creation = <Date 2009-11-13.19:23:34.055>
    creator = 'pitrou'
    dependencies = []
    files = ['23413', '23414', '27853']
    hgrepos = []
    issue_num = 7317
    keywords = ['patch', 'needs review']
    message_count = 13.0
    messages = ['95197', '95867', '120374', '145586', '145589', '145593', '145610', '160465', '167272', '174268', '174616', '174622', '174627']
    nosy_count = 9.0
    nosy_names = ['amaury.forgeotdarc', 'pitrou', 'ezio.melotti', 'asvetlov', 'oddthinking', 'alonho', 'python-dev', 'martin.panter', 'kachayev']
    pr_nums = []
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue7317'
    versions = ['Python 3.3']

    @pitrou
    Copy link
    Member Author

    pitrou commented 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).

    @pitrou pitrou added interpreter-core (Objects, Python, Grammar, and Parser dirs) stdlib Python modules in the Lib dir type-feature A feature request or enhancement labels Nov 13, 2009
    @amauryfa
    Copy link
    Member

    amauryfa commented 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
    Copy link
    Mannequin

    oddthinking mannequin commented 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
    Copy link
    Mannequin

    alonho mannequin commented Oct 15, 2011

    Submitting a patch proposing this format:

    -----BEGIN UNRAISABLE EXCEPTION-----

    Class: AttributeError
    Instance: "'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
    Copy link
    Mannequin

    oddthinking mannequin commented Oct 15, 2011

    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
    Copy link
    Mannequin

    alonho mannequin commented Oct 15, 2011

    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
    Copy link
    Mannequin

    oddthinking mannequin commented 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
    Copy link
    Mannequin

    alonho mannequin commented May 12, 2012

    how does one get his patch reviewed? (it's been 6 months)

    @pitrou
    Copy link
    Member Author

    pitrou commented Aug 2, 2012

    Oops, sorry for the silence, I had forgotten about this issue. I'll take a look at the patch soon.

    @alonho
    Copy link
    Mannequin

    alonho mannequin commented 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
    Copy link
    Mannequin

    kachayev mannequin commented 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
    Copy link
    Mannequin

    python-dev mannequin commented 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
    Copy link
    Contributor

    asvetlov commented Nov 3, 2012

    Committed. Thanks, guys!

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    interpreter-core (Objects, Python, Grammar, and Parser dirs) stdlib Python modules in the Lib dir type-feature A feature request or enhancement
    Projects
    None yet
    Development

    No branches or pull requests

    3 participants