diff --git a/picard/formats/apev2.py b/picard/formats/apev2.py index a29c319a3..beb23ee1e 100644 --- a/picard/formats/apev2.py +++ b/picard/formats/apev2.py @@ -189,17 +189,18 @@ class APEv2File(File): real_name = self._get_tag_name(tag) if real_name in ('Lyrics', 'Comment', 'Performer'): tag_type = re.compile(r"\(%s\)" % tag.split(':', 1)[1]) - for item in tags.get(real_name): - if tag_type.search(item): - tags.get(real_name).remove(item) + existing_tags = tags.get(real_name) + if existing_tags: + for item in existing_tags: + if tag_type.search(item): + tags.get(real_name).remove(item) elif tag in ('totaltracks', 'totaldiscs'): tagstr = real_name.lower() + 'number' - try: + if tagstr in metadata: tags[real_name] = metadata[tagstr] - except KeyError: - pass else: - del tags[real_name] + if real_name in tags: + del tags[real_name] def _get_tag_name(self, name): if name.startswith('lyrics:'): diff --git a/test/test_formats.py b/test/test_formats.py index 74df658b6..a506cd2c5 100644 --- a/test/test_formats.py +++ b/test/test_formats.py @@ -219,6 +219,17 @@ class CommonTests: self.assertIn('~rating', original_metadata.keys()) self.assertNotIn('~rating', new_metadata.keys()) + @skipUnlessTestfile + def test_delete_non_existant_tags(self): + metadata = Metadata() + metadata.delete('albumartist') + metadata.delete('performer:drums') + metadata.delete('totaltracks') + new_metadata = save_and_load_metadata(self.filename, metadata) + self.assertNotIn('albumartist', new_metadata.keys()) + self.assertNotIn('performer:drums', new_metadata.keys()) + self.assertNotIn('totaltracks', new_metadata.keys()) + @skipUnlessTestfile def test_delete_complex_tags(self): metadata = Metadata()