Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Description
Bug report
Whennotes on an exception cannot be shown because therepr andstr raise exceptions, a<note str() failed> message is shown instead. In the case whereexception.__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:
classA:def__repr__(self):raiseException()e=Exception()e.__notes__= [A()]# !!!raisee
user@host $ ./repro.pyTraceback (most recent call last): File "./repro.py", line 8, in <module> raise eException<note str() failed>user@host $__notes__ is just a single broken "note" - output does not include a newline:
classA:def__repr__(self):raiseException()e=Exception()e.__notes__=A()# !!!raisee
user@host $ ./repro.pyTraceback (most recent call last): File "./repro.py", line 8, in <module> raise eException<__notes__ repr() failed>user@host $Additionally, when__notes__ is a string/bytes, the contents are expoded over multiple lines because of anisinstance(__notes__, Sequence) check.
String:
e=Exception()e.__notes__="a note"raisee
user@host $ ./repro.pyTraceback (most recent call last): File "./repro.py", line 8, in <module> raise eExceptionanoteuser@host $Bytes:
e=Exception()e.__notes__=b"a note"raisee
user@host $ ./repro.pyTraceback (most recent call last): File "./repro.py", line 8, in <module> raise eException9732110111116101user@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)