首页 > 解决方案 > python和Flask框架中的索引超出范围

问题描述

出于某种原因,python 解释器认为索引超出范围,但事实并非如此!

list_of_venues = Venue.query.with_entities(Venue.id, Venue.city, Venue.state, Venue.name).all()
  data = []
  #{'city': list_of_venues[0].city, 'state': list_of_venues[0].state, 'venues':[]}
  counter = 0
  # print(len(list_of_venues))
  # print(data[counter]["city"])
  

  for venue in list_of_venues:
    print(counter)
    # print(data[counter]["city"])
    if counter == 0:
      city_dict={}
      city_dict["city"] = venue.city
      city_dict["state"] = venue.state
      city_dict["venues"] = []
      data.append(city_dict)
      city_dict = {}
    if counter > 0:
      if venue.city != data[counter]["city"]:
        city_dict={}
        city_dict["city"] = venue.city
        city_dict["state"] = venue.state
        city_dict["venues"] = []
        data.append(city_dict)
        city_dict = {}
    counter += 1
    print(counter)
    # if counter != (len(list_of_venues) - 1):
    #   counter = counter + 1

  print(data)

  data = list_of_venues
  


  return render_template('pages/venues.html', areas=data)

这是错误的行: if venue.city != data[counter]["city"]:

这是错误:IndexError:列表索引超出范围

感谢您花时间指导我!

标签: python

解决方案


在您的代码中,您的data变量是长度为 0 的空列表,因此当循环进入第二次迭代并且counter现在为 1 时,它会引发错误。

移动您的数据分配

data = list_of_venues

直到循环之前,它应该可以工作。

所以如果你有

list_of_venues = Venue.query.with_entities(Venue.id, Venue.city, Venue.state, Venue.name).all()
  data = []
  #{'city': list_of_venues[0].city, 'state': list_of_venues[0].state, 'venues':[]}
  counter = 0
  # print(len(list_of_venues))
  # print(data[counter]["city"])
  data = list_of_venues
  for venue in list_of_venues:
    print(counter)
    # print(data[counter]["city"])
    if counter == 0:
      city_dict={}
      city_dict["city"] = venue.city
      city_dict["state"] = venue.state
      city_dict["venues"] = []
      data.append(city_dict)
      city_dict = {}
    if counter > 0:
      if venue.city != data[counter]["city"]:
        city_dict={}
        city_dict["city"] = venue.city
        city_dict["state"] = venue.state
        city_dict["venues"] = []
        data.append(city_dict)
        city_dict = {}
    counter += 1
    print(counter)
    # if counter != (len(list_of_venues) - 1):
    #   counter = counter + 1
  print(data)
  return render_template('pages/venues.html', areas=data)

它应该工作。


推荐阅读