From 24dd23705897f75889073c364941e08f9b6e00d5 Mon Sep 17 00:00:00 2001 From: tristannew Date: Sun, 12 May 2024 20:43:21 +0100 Subject: [PATCH] Detailed Error Message for `get_dimensionality()` (#1874) --- CHANGES | 2 ++ pint/facets/plain/registry.py | 7 ++++++- pint/testsuite/test_errors.py | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 66281cc6d..9ec58b72c 100644 --- a/CHANGES +++ b/CHANGES @@ -49,6 +49,8 @@ Pint Changelog (PR #1819) - Add numpy.linalg.norm implementation. (PR #1251) +- Improved error message in `get_dimensionality()` when non existent units are passed. + (PR #1874, Issue #1716) 0.22 (2023-05-25) ----------------- diff --git a/pint/facets/plain/registry.py b/pint/facets/plain/registry.py index 277a6f7a2..09fd220ee 100644 --- a/pint/facets/plain/registry.py +++ b/pint/facets/plain/registry.py @@ -736,7 +736,12 @@ def _get_dimensionality_recurse( for key in ref: exp2 = exp * ref[key] if _is_dim(key): - reg = self._dimensions[key] + try: + reg = self._dimensions[key] + except KeyError: + raise ValueError( + f"{key} is not defined as dimension in the pint UnitRegistry" + ) if isinstance(reg, DerivedDimensionDefinition): self._get_dimensionality_recurse(reg.reference, exp2, accumulator) else: diff --git a/pint/testsuite/test_errors.py b/pint/testsuite/test_errors.py index 370ccfc9d..e0c4ec3f4 100644 --- a/pint/testsuite/test_errors.py +++ b/pint/testsuite/test_errors.py @@ -144,3 +144,13 @@ def test_pickle_definition_syntax_error(self, subtests): with pytest.raises(PintError): raise ex + + def test_dimensionality_error_message(self): + ureg = UnitRegistry(system="SI") + with pytest.raises(ValueError) as error: + ureg.get_dimensionality("[bilbo]") + + assert ( + str(error.value) + == "[bilbo] is not defined as dimension in the pint UnitRegistry" + )