Thanks to visit codestin.com
Credit goes to github.com

Skip to content

BUG: __getattr__ must raise AttributeError if name not found #20822

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

Merged
merged 1 commit into from
Aug 10, 2021

Conversation

lpsinger
Copy link
Contributor

PR Summary

PR #20733 added module-level __getattr__ functions to several modules. All of the functions with the exception of the one in matplotlib.style.core had a terminal raise AttributeError to handle unmatched attributes.

The omission in matplotlib.style.core was probably unintentional; it results in confusing and buggy behavior such as:

>>> import matplotlib.style.core
>>> if hasattr(matplotlib.style.core, '__warningregistry__'):
...     del matplotlib.style.core.__warningregistry__
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
AttributeError: __warningregistry__

This causes problems in the unit tests for astropy affiliated packages. See astropy/astropy#12038.

PR Checklist

  • Has pytest style unit tests (and pytest passes).
  • Is Flake 8 compliant (run flake8 on changed files to check).
  • New features are documented, with examples if plot related.
  • Documentation is sphinx and numpydoc compliant (the docs should build without error).
  • Conforms to Matplotlib style conventions (install flake8-docstrings and run flake8 --docstring-convention=all).
  • New features have an entry in doc/users/next_whats_new/ (follow instructions in README.rst there).
  • API changes documented in doc/api/next_api_changes/ (follow instructions in README.rst there).

PR matplotlib#20733 added module-level `__getattr__` functions to several
modules. All of the functions with the exception of the one in
`matplotlib.style.core` had a terminal `raise AttributeError` to
handle unmatched attributes.

The omission in `matplotlib.style.core` was probably
unintentional; it results in confusing and buggy behavior
such as:

```pycon
>>> import matplotlib.style.core
>>> if hasattr(matplotlib.style.core, '__warningregistry__'):
...     del matplotlib.style.core.__warningregistry__
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
AttributeError: __warningregistry__
```

This causes problems in the unit tests for astropy affiliated
packages. See astropy/astropy#12038.
@jklymak jklymak merged commit 7d0a166 into matplotlib:master Aug 10, 2021
@lpsinger lpsinger deleted the getattr-raise-attributerror branch August 10, 2021 23:21
lpsinger added a commit to lpsinger/matplotlib that referenced this pull request Aug 18, 2021
PR matplotlib#20806 added another instance of a module-level `__getattr__`
function that was missing a final `raise AttributeError` to catch
unknown attributes. This is the same kind of bug as matplotlib#20822.

See also astropy/astropy#12038.
lpsinger added a commit to lpsinger/matplotlib that referenced this pull request Aug 18, 2021
lpsinger added a commit to lpsinger/matplotlib that referenced this pull request Aug 18, 2021
lpsinger added a commit to lpsinger/matplotlib that referenced this pull request Aug 18, 2021
lpsinger added a commit to lpsinger/matplotlib that referenced this pull request Aug 18, 2021
lpsinger added a commit to lpsinger/matplotlib that referenced this pull request Aug 18, 2021
lpsinger added a commit to lpsinger/matplotlib that referenced this pull request Aug 19, 2021
tacaswell pushed a commit to anntzer/matplotlib that referenced this pull request Aug 20, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants