← 返回首页
Issues when showing broken `Exception.__notes__` · Issue #103895 · python/cpython · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

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

Provide feedback

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

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

Issues when showing broken Exception.__notes__ #103895

New issue
New issue

Description

Bug report

When notes on an exception cannot be shown because the repr and str raise exceptions, a <note str() failed> message is shown instead. In the case where exception.__notes__ is not a sequence and cannot be shown, a <__notes__ repr() failed> is shown. In the second case, the message does not include a trailing newline.

__notes__ is a list containing a broken "note" - output includes a newline:

class A: def __repr__(self): raise Exception() e = Exception() e.__notes__ = [A()] # !!! raise e
user@host $ ./repro.py Traceback (most recent call last): File "./repro.py", line 8, in <module> raise e Exception <note str() failed> user@host $

__notes__ is just a single broken "note" - output does not include a newline:

class A: def __repr__(self): raise Exception() e = Exception() e.__notes__ = A() # !!! raise e
user@host $ ./repro.py Traceback (most recent call last): File "./repro.py", line 8, in <module> raise e Exception <__notes__ repr() failed>user@host $

Additionally, when __notes__ is a string/bytes, the contents are expoded over multiple lines because of an isinstance(__notes__, Sequence) check.

String:

e = Exception() e.__notes__ = "a note" raise e
user@host $ ./repro.py Traceback (most recent call last): File "./repro.py", line 8, in <module> raise e Exception a n o t e user@host $

Bytes:

e = Exception() e.__notes__ = b"a note" raise e
user@host $ ./repro.py Traceback (most recent call last): File "./repro.py", line 8, in <module> raise e Exception 97 32 110 111 116 101 user@host $

Even though the above are all edge cases, since there are some checks that handle these cases already, it makes sense to handle them more gracefully.

Your environment

  • CPython versions tested on: 3.12.0a7+
  • Operating system and architecture: macOS Mojave (x86)

Linked PRs

Metadata

Metadata

Assignees

Labels

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

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

  • Open in GitHub Copilot app

Footer

© 2026 GitHub, Inc.