From 7220f1a852d50006c28cbe63da937dfb0ae426f3 Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Tue, 2 Aug 2011 11:22:26 -0700 Subject: [PATCH] hide buggy/unhandled Mutagen exceptions --- NEWS | 1 + beets/mediafile.py | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/NEWS b/NEWS index 5df63f196..eeee7e70e 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,6 @@ 1.0b10 ------ +* Handle exceptions thrown when running Mutagen. * Fix a missing __future__ import in embedart on Python 2.5. * Fix ID3 and MPEG-4 tag names for the album-artist field. * Fix Unicode encoding of album artist, album type, and label. diff --git a/beets/mediafile.py b/beets/mediafile.py index 5f87b9a43..12281f1f5 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -39,11 +39,17 @@ import re import base64 import imghdr import os +import logging +import traceback from beets.util.enumeration import enum __all__ = ['UnreadableFileError', 'FileTypeError', 'MediaFile'] +# Logger. +log = logging.getLogger('beets') + + # Exceptions. # Raised for any file MediaFile can't read. @@ -630,9 +636,14 @@ class MediaFile(object): try: self.mgfile = mutagen.File(path) except unreadable_exc: + log.warn('header parsing failed') raise UnreadableFileError('Mutagen could not read file') except IOError: raise UnreadableFileError('could not read file') + except: + # Hide bugs in Mutagen. + log.error('uncaught Mutagen exception:\n' + traceback.format_exc()) + raise UnreadableFileError('Mutagen raised an exception') if self.mgfile is None: # Mutagen couldn't guess the type raise FileTypeError('file type unsupported by Mutagen')