【问题标题】:'KeyError: 0' accessing items'KeyError: 0' 访问项目
【发布时间】:2016-06-21 17:48:23
【问题描述】:

我正在将 XML 数据转换为 JSON,然后将其存储在数据库中。 我收到一个关键错误 0。第 12 行出现错误。相关的代码文件是-

from django.core.management.base import BaseCommand, CommandError
import boxer.utils3 as utils3


class Command(BaseCommand):
    help = "it saves news."

    def handle(self,*args,**options):
      g1 = utils3.wegGetter("https://www.naukrinama.com/feed/")
      items = utils3.processor(g1)
      for i in range(0,len(items)):
         item = items[i] ##line12
         utils3.saver(item)
      return

第二个文件是-

import requests
import xmltodict
from . import models

def wegGetter(url):
   f1 = requests.get(url)
   g1 = xmltodict.parse(f1.content)
   return g1

def processor(content):
   items = content['rss']['channel']
   return items

def saver(item):
   title = item['title']
   category=item['category']
   description=item['description']
   image_url=item['post-thumbnail']
   url=item['link']
   _content = models.Content(cid="2",title=title,category=category,image_url=image_url,description=description,url=url)
   _content.save()
   return

【问题讨论】:

    标签: python json xml dictionary


    【解决方案1】:

    processor 返回一个字典,而不是一个列表:它有 titlelink 等键。

    根本没有理由使用那个 for 循环。只需将items 直接传回saver

    请注意,如果您确实需要迭代,则无论如何都不要使用range(len(whatever))。在字典的情况下,您应该直接迭代项目:

    for key, value in items:
       ... do something with key and value...
    

    【讨论】:

      【解决方案2】:

      看起来items 是一个字典,它的长度确实与它们包含的(键,值)对的数量相对应。然而,这些项目是由它们的键引用的,它们是任意的,不一定是从 0 开始的顺序数字索引,就像它们对于 list 一样。

      handle()方法中的循环改成这样:

            ...
            items = utils3.processor(g1)
            for key, value items.items():
                utils3.saver(value)
            ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-04
        • 2018-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-16
        • 2018-05-16
        • 1970-01-01
        相关资源
        最近更新 更多