gpt4 book ai didi

python-3.x - 字典中缺失值的错误处理

转载 作者:行者123 更新时间:2023-12-03 07:58:55 26 4
gpt4 key购买 nike

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

类型错误:描述符“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)

最佳答案

尝试:

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 ),该对象自 Action 为第一个参数传递。这是绑定(bind)方法的一个特征。如果您调用 'dict.get()'(使用 dict 类 dict ),它不知道将哪个 dict 对象作为 self 传递参数,并且您必须明确提供它。

考虑以下:
>>> 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'

关于python-3.x - 字典中缺失值的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39707780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com