-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
DOC: add section about how to write good error messages #25292
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
Open
tacaswell
wants to merge
1
commit into
matplotlib:main
Choose a base branch
from
tacaswell:doc/verbose_errors
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -549,3 +549,57 @@ example code you can load it into a file handle with:: | |
|
||
import matplotlib.cbook as cbook | ||
fh = cbook.get_sample_data('mydata.dat') | ||
|
||
.. _verbose-error-messages: | ||
|
||
Error Messages | ||
-------------- | ||
|
||
|
||
Error messages should err on the side of being verbose, descriptive, and | ||
specific about what went wrong. They should be informative enough so that a | ||
typical user (not an expert of our API) can understand, debug, and fix their | ||
problem based solely on the message, without the need to consult the online | ||
documentation. | ||
|
||
For example, input validation errors should include, where possible, | ||
information about which input is invalid, what value was passed in, and why the | ||
value is invalid, e.g. :: | ||
|
||
raise ValueError(f"{value=!r} is invalid, value must be a positive integer") | ||
|
||
This message helps the user to quickly diagnose and fix their problem. | ||
|
||
Remember that many other libraries are implemented on top of Matplotlib, and | ||
therefore ``value`` may not even have been directly passed by the user, but | ||
rather generated in some intermediate layer. In such cases, this kind of | ||
highly explicit messages can be particularly useful, compared to shorter | ||
messages such as :: | ||
|
||
raise ValueError("invalid value") | ||
|
||
|
||
Internal helpers | ||
~~~~~~~~~~~~~~~~ | ||
|
||
Matplotlib has a number of helper functions in the ``matplotlib._api`` module | ||
named as ``check_*`` which provide nice error messages for common checks | ||
in Matplotlib. Please use these when working on the Matplotlib code base, it | ||
both saves a bunch of duplicate code and ensures our error messages are | ||
consistent across the library. Use them in your own code at your own risk, we | ||
consider them private API and reserve the right change them with no notice on | ||
any release. | ||
|
||
|
||
.. currentmodule:: matplotlib | ||
|
||
|
||
.. autosummary:: | ||
:toctree: _as_gen | ||
:template: autosummary.rst | ||
:nosignatures: | ||
|
||
_api.check_isinstance | ||
_api.check_in_list | ||
_api.check_shape | ||
_api.check_getitem | ||
Comment on lines
+594
to
+605
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These appear to already have been documented somewhere since the build is failing. |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.