2016-06-21 5 views
0

Я преобразовываю данные XML в JSON, а затем сохраняю его в базе данных. Я получаю ключевую ошибку 0. Ошибка возникает в строке12. Связанные файлы кода являются-'KeyError: 0' accessing items

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 возвращает словарь, а не список: он имеет ключи как title, link и т.д.

Там нет причин, чтобы иметь, что для цикла вообще. Просто перейдите items прямо обратно в saver.

Обратите внимание, что если вам нужно итерации, вы никогда не должны делать это с range(len(whatever)) в любом случае. В случае словаря вам следует перебирать товары напрямую:

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