2016-06-21 102 views
0

我将XML数据转换为JSON,然后将其存储在数据库中。 我得到一个关键错误0.错误发生在line12中。相关的代码文件是─'KeyError:0'访问项目

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 

回答

0

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

改变循环的handle()方法是:

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

processor返回一个字典,而不是一个列表:它有一个像titlelink钥匙等

毫无理由有为所有循环。只需通过items直接返回到saver

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

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