Skip to content

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
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ galleries/tutorials/intermediate/CL02.png
# sphinx build directory
doc/_build
doc/api/_as_gen
doc/devel/_as_gen
# autogenerated by sphinx-gallery
doc/examples
doc/gallery
Expand Down
54 changes: 54 additions & 0 deletions doc/devel/contributing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Comment on lines +556 to +559
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
--------------
Error messages should err on the side of being verbose, descriptive, and
--------------
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
Copy link
Member

Choose a reason for hiding this comment

The 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.