Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4f8ece4

Browse filesBrowse files
committed
MNT: raise ValueError and TypeError rather than KeyError
1 parent d0a240a commit 4f8ece4
Copy full SHA for 4f8ece4

File tree

Expand file treeCollapse file tree

3 files changed

+18
-13
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+18
-13
lines changed

‎doc/api/prev_api_changes/api_changes_3.6.0/deprecations.rst

Copy file name to clipboardExpand all lines: doc/api/prev_api_changes/api_changes_3.6.0/deprecations.rst
+1-2Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ functions have been marked for pending deprecation:
5757

5858
**Added 3.6.1** Use `matplotlib.cm.ColormapRegistry.get_cmap` if you
5959
have a string, `None` or a `matplotlib.colors.Colormap` object that you want
60-
to convert to a `matplotlib.colors.Colormap` instance. Raises `KeyError`
61-
rather than `ValueError` for missing strings.
60+
to convert to a `matplotlib.colors.Colormap` instance.
6261
- ``matplotlib.cm.register_cmap``; use `matplotlib.colormaps.register
6362
<.ColormapRegistry.register>` instead
6463
- ``matplotlib.cm.unregister_cmap``; use `matplotlib.colormaps.unregister

‎lib/matplotlib/cm.py

Copy file name to clipboardExpand all lines: lib/matplotlib/cm.py
+8-7Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,6 @@ def get_cmap(self, cmap):
202202
Returns
203203
-------
204204
Colormap
205-
206-
Raises
207-
------
208-
KeyError
209205
"""
210206
# get the default color map
211207
if cmap is None:
@@ -214,9 +210,14 @@ def get_cmap(self, cmap):
214210
# if the user passed in a Colormap, simply return it
215211
if isinstance(cmap, colors.Colormap):
216212
return cmap
217-
218-
# otherwise, it must be a string so look it up
219-
return self[cmap]
213+
if isinstance(cmap, str):
214+
_api.check_in_list(sorted(_colormaps), cmap=cmap)
215+
# otherwise, it must be a string so look it up
216+
return self[cmap]
217+
raise TypeError(
218+
'get_cmap expects None or an instance of a str or Colormap . ' +
219+
f'you passed {cmap!r} of type {type(cmap)}'
220+
)
220221

221222

222223
# public access to the colormaps should be via `matplotlib.colormaps`. For now,

‎lib/matplotlib/tests/test_colors.py

Copy file name to clipboardExpand all lines: lib/matplotlib/tests/test_colors.py
+9-4Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,18 +111,23 @@ def test_register_cmap():
111111

112112
def test_colormaps_get_cmap():
113113
cr = mpl.colormaps
114-
new_cm = mcolors.ListedColormap(cr["viridis"].colors, name='v2')
115114

116-
# check None, str, and Colormap pass
115+
# check str, and Colormap pass
117116
assert cr.get_cmap('plasma') == cr["plasma"]
118117
assert cr.get_cmap(cr["magma"]) == cr["magma"]
119118

120-
# check default default
119+
# check default
121120
assert cr.get_cmap(None) == cr[mpl.rcParams['image.cmap']]
121+
122+
# check ValueError on bad name
122123
bad_cmap = 'AardvarksAreAwkward'
123-
with pytest.raises(KeyError, match=bad_cmap):
124+
with pytest.raises(ValueError, match=bad_cmap):
124125
cr.get_cmap(bad_cmap)
125126

127+
# check TypeError on bad type
128+
with pytest.raises(TypeError, match='object'):
129+
cr.get_cmap(object())
130+
126131

127132
def test_double_register_builtin_cmap():
128133
name = "viridis"

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.