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

Appearance settings

Issues when showing broken Exception.__notes__ #103895

Copy link
Copy link
Closed
@pR0Ps

Description

@pR0Ps
Issue body actions

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)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.