From 11040d6b6959644d6503070715d078c27bb7a4be Mon Sep 17 00:00:00 2001 From: Priyansh Date: Thu, 8 Oct 2026 21:34:47 +0000 Subject: [PATCH] fix: better error message for broken Distribution objects (#508) --- importlib_metadata/__init__.py | 7 ++++++- tests/test_main.py | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/importlib_metadata/__init__.py b/importlib_metadata/__init__.py index 3796fbce..7e948bc6 100644 --- a/importlib_metadata/__init__.py +++ b/importlib_metadata/__init__.py @@ -563,7 +563,12 @@ def _ensure_metadata_present(self, text: str | None) -> str: @property def name(self) -> str: """Return the 'Name' metadata for the distribution package.""" - return self.metadata['Name'] + try: + return self.metadata['Name'] + except KeyError: + raise KeyError( + f'No Name metadata found for {getattr(self, "_path", self)}' + ) from None @property def _normalized_name(self): diff --git a/tests/test_main.py b/tests/test_main.py index 63f9c06a..cd03be07 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -169,6 +169,19 @@ def test_missing_metadata(self): with self.assertRaises(MetadataNotFound): metadata('foo') + def test_missing_name_metadata(self): + """ + Dists with metadata but no Name should raise a KeyError + with a useful message identifying the distribution. + + Ref python/importlib_metadata#508. + """ + fixtures.build_files(self.make_pkg('foo-4.4'), self.site_dir) + dist = Distribution.at(self.site_dir / 'foo-4.4.dist-info') + with self.assertRaises(KeyError) as ctx: + dist.name + assert 'foo-4.4.dist-info' in str(ctx.exception) + class NonASCIITests(fixtures.OnSysPath, fixtures.SiteDir, unittest.TestCase): @staticmethod