Python - работа со словарями - ошибка - PullRequest
0 голосов
/ 28 апреля 2020

Ссылка: https://www.w3schools.com/python/trypython.asp?filename=demo_ref_dictionary_update

def read_wpl_file(self,start,filename):
    self.tree = ET.parse(filename)
    self.smil = self.tree.getroot()
    self.head = self.smil.find("head")
    self.title = self.head.find("title").text
    self.body = self.smil.find("body")
    self.seq = self.body.find("seq")
    self.media = self.seq.findall("media")
    self.songs = []
    for song_in_playlist in self.media:
        self.song = {}
        self.song.update({"path": song_in_playlist.attrib("src")})
        self.song.update({"album_title" : song_in_playlist.attrib("albumTitle")})
        self.song.update({"album_artist" : song_in_playlist.attrib("albumArtist")})
        self.song.update({"title" : song_in_playlist.attrib("trackTitle")})
        self.song.update({"artist" : song_in_playlist.attrib("trackArtist")})
        self.song.update({"duration" : song_in_playlist.attrib("duration")})
        self.songs.append(self.song)
    print(self.songs)
self.song.update({"path": song_in_playlist.attrib("src")})
TypeError: 'dict' object is not callable

1 Ответ

1 голос
/ 28 апреля 2020

Ошибка «объект не может быть вызван» означает, что рассматриваемый объект не поддерживает синтаксис вызова функции (например, attrib("src")).

xml.etree.ElementTree.Element.attrib - это dict, поэтому вы должны использовать синтаксис скобок (attrib["src"]) или другие методы dict для доступа к его элементам.

def read_wpl_file(self,start,filename):
    self.tree = ET.parse(filename)
    self.smil = self.tree.getroot()
    self.head = self.smil.find("head")
    self.title = self.head.find("title").text
    self.body = self.smil.find("body")
    self.seq = self.body.find("seq")
    self.media = self.seq.findall("media")
    self.songs = []
    for song_in_playlist in self.media:
        self.song = {}
        self.song.update({"path": song_in_playlist.attrib["src"]})
        self.song.update({"album_title" : song_in_playlist.attrib["albumTitle"]})
        self.song.update({"album_artist" : song_in_playlist.attrib["albumArtist"]})
        self.song.update({"title" : song_in_playlist.attrib["trackTitle"]})
        self.song.update({"artist" : song_in_playlist.attrib["trackArtist"]})
        self.song.update({"duration" : song_in_playlist.attrib["duration"]})
        self.songs.append(self.song)
    print(self.songs)
...