I want to create a list of dictionaries with the keys: Title, Album, and Artist.
I get the error:
AttributeError: 'NoneType' object has no attribute 'tag'
line 17:
song_title = mediafile.tag.title,
Here is my code:
import glob
import eyed3
class Song:
def __init__(self, song_title, album, artist_name,):
self.song_title = song_title
self.album = album
self.artist_name = artist_name
songs = []
media = glob.glob('C:\\My Stuff\\My Music (For Groove)/**/*.mp3', recursive=True)
for song in media:
mediafile = eyed3.load(song)
a = Song(
song_title = mediafile.tag.title,
album = mediafile.tag.album,
artist_name = mediafile.tag.artist,
)
songs.append({'Title' : a.song_title, 'Album' : a.album, 'Artist' : a.artist_name})
Any help will be appreciated.
From eyed3 documentation:
Loads the file identified by path and returns a concrete type of eyed3.core.AudioFile. If path is not a file an IOError is raised. None is returned when the file type (i.e. mime-type) is not recognized.
In your code, you are trying to extract the tags from the mediafile
before you know it's not None
and this is why you are getting this.
You could do a couple of things:
try/catch for IOError
and check for None
value of your mediafile
if the file's content is not recognized:
try:
mediafile = eyed3.load(song)
if mediafile:
... extract tag
else:
... log not recognized file format
except IOError:
.... log Exception