错误处理字典中的缺失值

时间:2016-09-26 16:23:11

标签: python-3.x dictionary error-handling

当人口文件缺少城市的人口数据时,我想在下面的代码中加入一些错误处理,但是我得到了这个消息。

TypeError:描述符'get'需要'dict'对象但收到'str'

import csv
import sys
import time


input_file = ('\myInput_file.csv')
output_file = ('\myOutput_file.csv')
population_file = ('\myPopulation_file.csv')

populations = {}

with open(population_file, 'r') as popfile:
    for line in csv.reader(popfile):
        populations[line[2]] = line[3]


with open(input_file, 'r') as infile, open(output_file, 'w', newline='') as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile, delimiter = ',')

for row in reader:

    population = dict.get(populations[row[0] + row[1]], None)
    new_line = [row[0]+row[1], population]
    writer.writerow(new_line)

1 个答案:

答案 0 :(得分:0)

尝试:

population = populations.get(row[0] + row[1], None)

错误的原因是get()是内置类型dict的方法描述符。与其他方法(作为类成员的函数)类似,它们要求第一个参数作为执行操作的对象。请考虑以下代码:

class Thing(object):
    def get(self, something):
        # ...

get()是类Thing的一种方法,它需要两个参数,something,您想要获取的内容,还需要self,您想要的对象从中得到它。

当您调用populations.get()(使用dict对象populations)时,对象将自动作为第一个参数传递。这是绑定方法的一个特征。如果你打电话给' dict.get()' (使用dict类dict),它不知道要作为self参数传递的dict对象,并且必须明确地提供它。

请考虑以下事项:

>>> Thing.get
<function Thing.get at 0x103ff6730>
>>> a = Thing()
>>> a.get
<bound method Thing.get of <__main__.Thing object at 0x104002cf8>>
>>>

以下是在非内置类上犯同样错误时会发生什么:

>>> Thing.get('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: get() missing 1 required positional argument: 'something'