gpt4 book ai didi

python - 未绑定(bind)本地错误 : local variable 'document' referenced before assignment

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:06 27 4
gpt4 key购买 nike

我有一个函数,它接收 CSV 文件并对其进行处理。我试图在运行 CSV 文件之前计算 CSV 文件中的行数,以确保我到达终点。

def parse_campaigns_cutsheet(country_code, input_file, DB, DB_hist, zip_id):

filecontent = urllib2.urlopen(input_file)
count = 0

csvFile = csv.DictReader(filecontent)
rowage = len(list(csvFile))

for row in csvFile:
count += 1

if 'MM' not in row['Tier']:
continue

if RB_COUNTRIES_new[country_code]['cut_sheet_country'] != row['Country']:
continue

document = DB.find_one({'rb_account_id': RB_COUNTRIES_new[country_code]['rb_account_id']})

if document is None:
continue

DB.save(document)

report_work(document, DB, DB_hist)

我不断收到以下错误 UnboundLocalError: local variable 'document' referenced before assignment。如果我删除 rowage = len(list(csvFile)) 行它工作正常吗?

最佳答案

发生这种情况是因为 DictReader 是一个生成器。

当您在DictReader 上调用list 时,它将yield 所有值放入列表中,并且不再是可迭代的。

这就是为什么当您的 for 循环试图遍历它时,它永远不会这样做,并且永远不会分配 document

如果您想完成您想要做的事情,您可以保留对列表的引用,然后遍历列表:

...
csvFile = csv.DictReader(filecontent)
filecontent_list = list(csvFile)
rowage = len(filecontent_list)

for row in filecontent_list:
...

请记住 - 这意味着您的所有数据都将保存在内存中!当迭代生成器而不强制它是一个列表时,每次只有一个迭代被保存在内存中。

关于python - 未绑定(bind)本地错误 : local variable 'document' referenced before assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43984085/

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