2013-07-18 56 views
0

我有一段代码是为了比较两个列表(从CSV文件中读取)并返回A中的项目而不是B中的项目,反之亦然。 下面是我得到了什么:Python:有人可以帮我调试这个错误吗? [新手]

import csv 

#open CSV's and read first column with product IDs into variables pointing to lists 
with open("A.csv", "rb") as f: 
    a = {row[0] if len(row) else default_value for row in csv.reader(f)} 
with open("B.csv", "rb") as g: 
    b = {row[0] if len(row) else default_value for row in csv.reader(g)} 


#create variables pointing to lists with unique product IDs in A and B respectively 

in_a_not_b = a-b 
in_b_not_a = b-a 

print len(in_a_not_b), " items in A missing from B", in_a_not_b 
print len(in_b_not_a), " items in B missing from A", in_b_not_a 


print "done!" 

它用来运行得很好,直到我得到这个错误:

Traceback (most recent call last): 
    File "C:/.../python - Comprare two lists", line 7, in <module> 
    b = {row[0] if len(row) else default_value for row in csv.reader(g)} 
    File "C:/.../python - Comprare two lists", line 7, in <setcomp> 
    b = {row[0] if len(row) else default_value for row in csv.reader(g)} 
NameError: global name 'default_value' is not defined 

任何人都可以请帮助? 谢谢!

+4

错误已经告诉你。未定义'default_value'。 – zhangyangyu

+0

你没有给'default_value'任何默认值:) – Sudipta

回答

3

您没有default_value变量。

就像你的错误说:

NameError: global name 'default_value' is not defined 

你应该把类似:

default_value = None 

上面的代码。

+0

非常感谢。为什么目前工作没有问题?什么改变了? – Optimesh

+1

我猜测到现在你从来不需要它,因为行总是有长度的。 –

+1

如果您觉得我的回答对您有帮助,您可以[接受我的回答](http://meta.stackexchange.com/a/5235/192545)。 –

1

你的表有现在的一些空行,这样的条件

if len(row)

现在Falsedefault_value使用,但没有找到。

+0

谢谢。没有足够的声望投票,道歉 – Optimesh

+0

是的,我觉得这将是一个全职工作,以获得声誉;) – Frodon

+0

+1,这正确回答了这个问题(你应得到一个upvote) –

相关问题