-
-
Notifications
You must be signed in to change notification settings - Fork 30.7k
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
Use Python 3.11 exception notes (PEP 678) to provide hints on errors #96958
Comments
This achieves the same display:
If there is a use case for being able to distinguish the error from the suggestion, then putting the suggestion in a note can help do that. |
Is is something common to include a newline character in error messages? My worry is that maybe it's not displayed properly in a terminal, in logs, or in a graphical dialog (like a popup message). Well, now we have this new feature and I would like to use it :-) You know, eating our own dog food :-) The disadvantage of notes is that it's something new (Python 3.11 is not released yet ;-)), so maybe existing tools don't show notes yet (just ignore them), and notes might be lost when an exception is converted to a new exception (of a different type and/or with a different error message). Example: try:
raise TypeError("original message")
except Exception as exc:
raise ValueError(f"new message ({exc})") from None Python 3.12 output:
|
@iritkatriel: Well, it seems like I failed to convince you to use notes for "suggestions". It seems like I misunderstood the part about "suggestions" (called "tips" in PEP 678). Since you authored PEP 678, I will follow your guidance and I close the issue. So it seems like right now, there is no need for a C API |
Python 3.11 adds BaseException.add_note() method to add "notes" to exceptions (PEP 678). One of the Motivations is providing hints to novices:
I propose modifying the few existing errors which already provide hints by converting the sentence to a note: restrict the error message to the actual error, and move hints to notes.
Example of an existing error with a hint:
Currently, the actual error ("unsupported operand") and the hint ("Did you mean...") are displayed on the same line. IMO displaying the hint on a separated line would make it easier to spot (it would be less likely to miss it).
Example raising a note manually to see how it's displayed:
Current Python 3.12 output:
I proposed PR #96878 to add
_PyErr_AddNote()
function to the internal C API.I found these hints:
print >> 123
:unsupported operand ...: Did you mean "print(<message>, "file=<output_stream>)"?
1 is 2
:"is" with a literal. Did you mean "=="?
1 is not 2
:"is" with a literal. Did you mean "!="?
PyErr_Display()
with_Py_Offer_Suggestions()
(issue Offer suggestions on AttributeError and NameError #82711) is not a good fit: this code doesn't modify the exception on purposeprint "hello"
:Missing parentheses in call to 'print'. Did you mean print(...)?
(similar error onexec code
)The text was updated successfully, but these errors were encountered: