diff --git a/CHANGES b/CHANGES index 1cde05402..02cc0339e 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,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 c9c7d94d2..f7b40ffea 100644 --- a/pint/facets/plain/registry.py +++ b/pint/facets/plain/registry.py @@ -727,7 +727,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 a045f6e19..7c0d8c82f 100644 --- a/pint/testsuite/test_errors.py +++ b/pint/testsuite/test_errors.py @@ -142,3 +142,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" + )