2017-02-20 16 views
0

Я новое программирование на python (2.x) и даже ищущий часы, я не мог решить проблему. Python возвращает исключение KeyErrorPython возвращает KeyError в csv.DictReader()

The (объект) .csv файл является:

id,name,type 
1,low,player 

Код питон:

import csv 

class Item(object): 

    def setup(self, config): 
     self.config = config 
     self.label = config['label'] 
     self.name = config['name'] 
     self.type = config['type'] 
def create_item(config): 
    new_item = Item() 
    new_item.setup(config) 
    return(new_item) 

def populate(): 
    all_items = {} 
    f = open('object.csv', 'rb') 
    reader = csv.DictReader(f, delimiter = ',') 
    for row in reader: 
     new_item = (create_item(row)) 
     all_items[new_item.label] = new_item 
    return(all_items) 

Python возвращает:

Self.type = config['type'] 
KeyError: 'type' 

Странная вещь заключается в том, что как в csv, так и в коде python заголовок столбца не содержит ошибки ввода. Когда я меняю имя столбца «id», ошибка возвращается к новому заголовку (ранее «id»). (То же самое происходит, когда я добавляю еще один заголовок и пытаюсь его прочитать)

Любая помощь приветствуется и сожалеет о неудобствах. благодарен

+0

У вас есть дополнительное пространство вокруг запятых поэтому реальные имена столбцов ' 'идентификатор ''' имя ''& '' type''. Попробуйте напечатать строку перед вызовом 'create_item', чтобы увидеть ее на практике. – niemmi

+0

Дополнительные места были моей ошибкой, набрав сообщение. Извини за это. Возврат при печати строки: '{' id ':' 1 ',' name ':' low ',' type ':' player '}', но после этого ошибка сохраняется –

+0

[Catch the exception] (https://docs.python.org/3/tutorial/errors.html#handling-exceptions), а в шрифте except print '' 'row''' - это ключи, что вы ожидали? – wwii

ответ

0
class Item(object): 

     def setup(self, config): 
      self.config = config 
      self.id = config['id'] 
      self.name = config['name'] 
      self.type = config['type'] 

    def create_item(config): 
      new_item = Item() 
      new_item.setup(config) 
      return(new_item) 
    def populate(): 
      all_items = {} 
      f = open('test.txt', 'r') 
      reader = csv.DictReader(f, delimiter = ',') 
      for row in reader: 
       new_item = (create_item(row)) 
       all_items[new_item.id] = new_item 
      return(all_items) 

выход:

things = populate() 
things.keys() 
dict_keys(['1']) 
+0

Этот вывод возвращает меня: Файл «items.py», строка 33, заполняет f = open («files/object.csv», «rb») RuntimeError: максимальная глубина рекурсии превышена при вызове объекта Python. Я понятия не имею, что это –

+0

То же самое происходит с f = open ('files/object.txt', 'r') [то же самое, когда я заменяю all_items [new_item.label] для all_items [new_item.id]] –

+0

@LeandroPeres, 1. это другая ошибка, поэтому ваша проблема решена. 2. Новая проблема, с которой вы сталкиваетесь, уже обсуждается здесь: http://stackoverflow.com/questions/14222416/recursion-in-python-runtimeerror-maximum-recursion-depth-exceeded-while-callin – gregory

 Смежные вопросы

  • Нет связанных вопросов^_^