【问题标题】:AttributeError: 'NoneType' object has no attribute 'tag' (using eyed3)AttributeError:“NoneType”对象没有属性“标签”(使用 eyed3)
【发布时间】:2019-01-05 01:49:11
【问题描述】:

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

我得到错误:

AttributeError: 'NoneType' 对象没有属性 'tag'

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

任何帮助将不胜感激。

【问题讨论】:

  • mediafile = eyed3.load(song) 正在返回 None
  • 请问,我该如何解决?
  • 您可以在致电load() 之前添加歌曲检查。也许if os.path.exists(song):
  • 添加大量 print 语句应该可以帮助您查看哪一行出现了问题。
  • 好的,我试试。

标签: python metadata eyed3


【解决方案1】:

来自 eyed3 documentation:

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

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

你可以做几件事:

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

try:
    mediafile = eyed3.load(song)
    if mediafile:
        ... extract tag
    else:
        ... log not recognized file format
except IOError:
    .... log Exception

【讨论】:

  • 我不知道是不是这个库,或者在过去的一千年左右事情是否发生了变化,但我记得其中一个主要的 ID3 库会处理带有 APEv2 标签的完全有效的 MP3 文件(或其他任何混淆它的东西)不是 MP3 文件,并且不允许您向其中添加 ID3 标签。
  • 我有一个加载良好的 mp3 文件,返回类型是 eyed3.mp3.Mp3AudioFile,但 .tag 属性是 NoneType。
【解决方案2】:

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

f = eyed3.load(file)
if not f.tag:
    f.initTag()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2021-12-26
    • 2019-07-23
    • 2018-05-13
    • 2020-09-07
    • 2017-05-03
    • 2023-03-16
    相关资源
    最近更新 更多