Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Unexpected location of naked exception wrapped in except* block #128799

Closed
Assignees
iritkatriel
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error
@jobh

Description

@jobh

Bug report

Bug description:

When anExceptionGroup is implicitly constructed by catching a naked exception in anexcept* block, the traceback of theExceptionGroup seems to point to the stackframe above where it is logically created:

deff():try:raiseException# Exception (inner) traceback terminates here    except*Exceptionase:raisef()# ExceptionGroup (wrapper) traceback terminates here

  + Exception Group Traceback (most recent call last):  |   File "/home/jobh/src/hypothesis/test_naked_exception.py", line 7, in <module>  |     f()  # ExceptionGroup (wrapper) traceback terminates here  |     ^^^  | ExceptionGroup:  (1 sub-exception)  +-+---------------- 1 ----------------    | Traceback (most recent call last):    |   File "/home/jobh/src/hypothesis/test_naked_exception.py", line 3, in f    |     raise Exception  # Exception (inner) traceback terminates here    |     ^^^^^^^^^^^^^^^    | Exception    +------------------------------------

I'm not sure if this should be called a bug, as it's not specifically documented how the wrapping ExceptionGroup traceback is constructed. But it is surprising, and did cause a bug in hypothesis where the Exception traceback is used to detect whether an exception originates in hypothesis itself or in user code12. The issue being that for wrapped naked exceptions we have to inspect the inner exception since the outer exception appears to be raised by the calling function.

As an alternative to the current behaviour, would it be possible to create the wrapper ExceptionGroup with a traceback pointing to where it is logically triggered - i.e., theexcept* block - rather than initially empty? IMO, that would be less suprising and would allow us to use the traceback without special-casing ExceptionGroup.

([edit] Or, if the desire is to avoid branching the traceback between the wrapper and the inner exception, use the outermost frame of the naked exception as the initial ExceptionGroup traceback. This would still avoid the appearance of happening in the caller.)

CPython versions tested on:

3.11, 3.12, 3.13

Operating systems tested on:

Linux

Linked PRs

Footnotes

  1. https://github.com/HypothesisWorks/hypothesis/issues/4183

  2. https://github.com/HypothesisWorks/hypothesis/pull/4239

Metadata

Metadata

Assignees

Labels

interpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions


    [8]ページ先頭

    ©2009-2025 Movatter.jp