【问题标题】:Python returns KeyError in csv.DictReader()Python 在 csv.DictReader() 中返回 KeyError
【发布时间】:2017-07-09 04:58:50
【问题描述】:

我是 python(2.x) 上的新编程人员,甚至找了几个小时都无法解决问题。 Python 返回一个 KeyError

(object).csv 文件是:

id,name,type
1,low,player

python代码是:

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”)。 (当我添加另一个标题并尝试读取它时也会发生同样的情况)

欢迎任何帮助,对于给您带来的不便,我们深表歉意。 感激不尽

【问题讨论】:

  • 逗号周围有多余的空格,因此真正的列名是'id '' name '' type'。在调用create_item 之前尝试打印一行以在实践中查看。
  • 多余的空格是我输入帖子的错误。对于那个很抱歉。我打印该行时的返回是:'{'id': '1', 'name': 'low', 'type': 'player'}' 但之后,错误仍然存​​在
  • Catch the exception 和除套件打印 row - 键是您所期望的吗?

标签: python csv keyerror


【解决方案1】:
 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'])

【讨论】:

  • 这个输出返回给我:文件“items.py”,第 33 行,在填充 f = open('files/object.csv', 'rb') RuntimeError: maximum recursion depth exceeded while calling a Python 对象我不知道它是什么
  • 同样的情况发生在 f = open('files/object.txt', 'r') [当我将 all_items[new_item.label] 换成 all_items[new_item.id]]
  • @LeandroPeres,1. 这是一个不同的错误,因此您的问题已解决。 2.您遇到的新问题已经在这里讨论过:stackoverflow.com/questions/14222416/…
猜你喜欢
  • 2018-05-12
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多