2

我想用以下键创建一个字典列表:标题、专辑和艺术家。

我得到错误:

AttributeError:“NoneType”对象没有属性“标签”

第 17 行:

song_title  = mediafile.tag.title,

这是我的代码:

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})

任何帮助将不胜感激。

4

2 回答 2

2

来自 eyed3文档

加载由路径标识的文件并返回具体类型的 eyed3.core.AudioFile。如果路径不是文件,则会引发 IOError。当文件类型(即 mime-type)无法识别时,返回 None。

在您的代码中,您试图mediafile在您知道它不是之前从中提取标签None,这就是您得到这个的原因。

你可以做几件事:

如果无法识别文件的内容,请尝试/捕获IOError并检查您的None值:mediafile

try:
    mediafile = eyed3.load(song)
    if mediafile:
        ... extract tag
    else:
        ... log not recognized file format
except IOError:
    .... log Exception
于 2018-07-27T22:52:44.767 回答
0

如果你加载一个还没有标签的文件,你需要初始化它

f = eyed3.load(file)
if not f.tag:
    f.initTag()
于 2021-04-27T13:12:17.400 回答