Python Ошибка типа 'NoneType' при попытке доступа к данным словаря - PullRequest
0 голосов
/ 02 марта 2020

Я использую API Spotify через Spotipy и пытаюсь получить название трека. Я использовал API с Javascript изрядное количество, и у меня не было проблем, пытаясь сделать по существу то же самое, и я столкнулся здесь со стеной.

По сути, я получаю треки данного списка воспроизведения, используя эту конечную точку: https://developer.spotify.com/documentation/web-api/reference/playlists/get-playlists-tracks/, и я пытаюсь извлечь названия треков.

Это будет вывести «объект дорожки» данной дорожки:

playlist_items = spotify.playlist_tracks(playlist_nameid[playlist])['items']
        for item in playlist_items:
            track_object = item['track']

Вот изображение вывода кода выше

Я знаю, что перезаписываю track_object Я только что сократил его для тестирования.

Если я попытаюсь track_object = item['track']['name'], я получу ошибку

TypeError at /radio/login
'NoneType' object is not subscriptable

Чтобы убедиться, что item['track'] является подписываемым объектом, я попытался type(item['track']), а на выходе было {}. Я очень запутался в этом вопросе, потому что ошибка, кажется, говорит мне, что объект словаря имеет тип 'none' Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Я понял это с помощью @schillingt - фильтрация ни одного элемента была правильным подходом. Вместо фильтрации элементов списка воспроизведения мне пришлось отфильтровать объекты дорожек.

Возвращает список имен дорожек списков воспроизведения:

playlist_items = spotify.playlist_tracks(playlist_nameid[playlist])['items']
        title = []
        for item in playlist_items:
            if item['track'] is None:
                continue
            else:
                title.append(item['track']['name'])
0 голосов
/ 02 марта 2020

Один из элементов в playlist_items - Нет или item['track'] - Нет. Следующее может работать лучше для вас:

item.get('track', {}).get('name')

Вы не можете отфильтровать ни одного элемента с помощью:

for item in playlist_items:
    if item is None:
        continue

Или вы можете защитить исходный выбор с помощью:

item and item.get('track', {}).get('name')
...