gpt4 book ai didi

python - 字典中的类型错误

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:55 24 4
gpt4 key购买 nike

我试图从字典中提取特定值,但我的程序不断对字典中的某些值抛出类型错误。谁能告诉我为什么?

python程序

import csv,os,re,sys

input_dict = csv.DictReader(open("./MCPlayerData/AllPlayerData2.csv"))
def list_scale_values(regexmatch,stopOnNA,person):
data=[]
for key in person:
if re.match(regexmatch, key):
try:
data.append(int(person[key]))
except (ValueError):
data.append('NA')
if(stopOnNA):
data=['NA'] #if any NA return NA
break
return data

try:
for person in input_dict:
print(list_scale_values(r'npi[0-9]+',True,person))
except (TypeError):
type, value, traceback = sys.exc_info()
print(type)
print(value)
print(traceback)
print '\n---\n',person,'\n---'
sys.exit()

print('DONE')

错误输出

    Traceback (most recent call last):
File "correlations.py", line 22, in <module>
print(list_scale_values(r'npi[0-9]+',True,person))
File "correlations.py", line 9, in list_scale_values
if re.match(regexmatch, key):
File "/usr/lib/python2.7/re.py", line 137, in match
return _compile(pattern, flags).match(string)
TypeError: expected string or buffer

最佳答案

为了避免此问题,请在创建正则表达式之前检查键是否是有效的字符串或缓冲区。

所以代替 if re.match(regexmatch, key):

编写以下代码

if key != None and re.match(regexmatch, key):

回答为什么某些人会发生这种情况的问题person在 csv 字典中?

如果 csv 文件没有考虑每行的一行中的所有列,则这种情况完全可能仅适用于某些行,在本例中 people

举个例子:

考虑以下 CSV 文件

name,type,address,value
zoo,1,111,2
foo,2,222,,
bar,3,333,5

这将为 csv.DictReader(open("filename.csv")) 中的人员获得以下结果

 {'type': '1', 'name': 'abc', 'value': '2', 'address': '111'}
{None: [''], 'type': '2', 'name': 'foo', 'value': '', 'address': '222'}
{'type': '3', 'name': 'bar', 'value': '5', 'address': '333'}

所以在这种情况下它适用于 people[0]people[2]但失败于 people[1]

关于python - 字典中的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29955120/

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