簡體   English   中英

如何解決 IndexError: list index out of range in a list of dict?

[英]How can I solve IndexError: list index out of range in a list of dict?

對於以下代碼,我得到

回溯(最近一次調用):文件“main.py”,第 24 行,在artist_uri = json_data['artists']['items'][0]['id'] 索引錯誤:列表索引超出范圍。

誰能告訴我如何解決這個問題?

for item in (fd):
  
  artist = item['Name']
  headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': 'Bearer xxxxx',
    }

  params = (
    ('q', artist),
    ('type', 'artist'),
    )
  response = requests.get('https://api.spotify.com/v1/search', headers=headers, params=params)
  
  json_data = json.loads(response.text) # convert json response to text/dict
  artist_uri = json_data['artists']['items'][0]['id']
  print(artist_uri)

這是因為無法從 Spotify API 中檢索到藝術家:“ANAVITÃÂRIA”。 以下是您的腳本在嘗試時得到的響應:

{
  "artists" : {
    "href" : "https://api.spotify.com/v1/search?query=ANAVIT%C3%83%C2%83%C3%82%C2%93RIA&type=artist&offset=0&limit=20",
    "items" : [ ],
    "limit" : 20,
    "next" : null,
    "offset" : 0,
    "previous" : null,
    "total" : 0
  }

有時可能是由於名稱中的字符。 為了避免這個錯誤,限速問題並繼續循環您可以檢查當前API響應中是否有數據以及API響應的狀態碼檢查更新的代碼:(請在嘗試時更新承載令牌)

import pandas as pd
import requests
import json
import time

fd = pd.read_csv('fd.csv',sep=';',encoding='latin1') # Reading data from csv
fd = fd.T.to_dict().values() # Converting dataframe into list of dictionaries

for item in (fd):
  
  artist = item['Name']
  headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'Authorization': 'Bearer xxxxxx',
    }

  params = (
    ('q', artist),
    ('type', 'artist'),
    )
  

  response = requests.get('https://api.spotify.com/v1/search', headers=headers, params=params)
  if response.status_code != 429:
    json_data = json.loads(response.text) # convert json response to text/dict
    
    if (len(json_data['artists']['items']) > 0):
      artist_uri = json_data['artists']['items'][0]['id']
      print(artist_uri)
  else:
    time.sleep(30)
    response = requests.get('https://api.spotify.com/v1/search', headers=headers, params=params)
    json_data = json.loads(response.text) # convert json response to text/dict
    
    if (len(json_data['artists']['items']) > 0):
      artist_uri = json_data['artists']['items'][0]['id']
      print(artist_uri)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM