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 single contained exception in excgroups in test summary #12975

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

jakkdl
Copy link
Member

@jakkdl jakkdl commented Nov 18, 2024

fixes #12943

As ExceptionInfo still doesn't have proper support for exception groups this continues upon the hacky solution from #10209, modifying the reprcrash as well.

I find this solution ... incredibly hacky and ugly, and am not a fan that n==1 gets handled but not n==2. But conceptually it just gets really tricky to figure out what info to strip, and how to show that. If we're going with stripping structure & group messages we could extend this solution to something like [in ExceptionGroup]: ValueError("foo"), TypeError("bar").

EDIT: less hacky now that I moved the code to ExceptionInfo.exconly

@psf-chronographer psf-chronographer bot added the bot:chronographer:provided (automation) changelog entry is part of PR label Nov 18, 2024
@jakkdl jakkdl marked this pull request as ready for review November 19, 2024 16:22
@jakkdl jakkdl requested a review from Zac-HD November 19, 2024 16:28
Comment on lines +593 to +595
def _get_single_subexc(
eg: BaseExceptionGroup[BaseException],
) -> BaseException | None:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simpler implementation:

def _get_single_subexc(
    eg: BaseExceptionGroup[BaseException],
) -> BaseException | None:
    if len(eg.exceptions) != 1:
        return None
    if isinstance(e := eg.exceptions[0], BaseExceptionGroup):
        return _get_single_subexc(e)
    return e

and isinstance(self.value, BaseExceptionGroup)
and (subexc := _get_single_subexc(self.value)) is not None
):
return f"[in {type(self.value).__name__}] {subexc!r}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return f"[in {type(self.value).__name__}] {subexc!r}"
return f"{subexc!r} [single exception in {type(self.value).__name__}]"

as discussed in the issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bot:chronographer:provided (automation) changelog entry is part of PR
Projects
None yet
Development

Successfully merging this pull request may close these issues.

=== short test summary info === messages are not useful for ExceptionGroups
2 participants