当人口文件缺少城市的人口数据时,我想在下面的代码中加入一些错误处理,但是我得到了这个消息。
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)
答案 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'