【发布时间】:2015-11-13 11:28:57
【问题描述】:
当有人发现我在这里做错了什么时,我可能会感到非常愚蠢,但我发现自己无法克服看似简单的错误。
我正在使用 Python 将一些数据写入 CSV。我想写的一件事是整数的list。我在将join列表写入文件之前将其转换为字符串:
with open('publishers.csv', 'wb') as f:
writer = csv.writer(f, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='')
for item in big_list_of_objects:
description = item.description
number_list = item.number_list
formatted_numbers = "-".join(number_list)
writer.writerow([
description,
formatted_numbers
])
number_list 中可能包含从零到一大堆数字的任何地方。如果它是一个空列表,join 只是将formatted_numbers 设置为等于一个空字符串。如果它不是一个空列表,我会得到一个由连字符连接的整数组成的字符串。
number_list = [1,2,34,12]
formatted_numbers = '1-2-34-12'
number_list = []
formatted_numbers = ''
反正就是这样。实际上,发生的情况是前五行写入成功然后我得到:
File "<console>", line 1, in <module>
File "/path/path/path.py", line 500, in offending_function
formatted_numbers
Error: need to escape, but no escapechar set
现在在这种特殊情况下,成功写入的前五行有一个空的number_list。持续崩溃的行也有一个空的number_list。在这一行的number_list 之前或之后写入的值没有什么奇怪的。当这个错误出现时,formatted_numbers 被写入并没有什么奇怪的 - 我扔进了一个 print 语句来调试,它只是一个空字符串,就像它之前的五个一样。
谁能帮我弄清楚我可能在哪里出错了?
编辑:我添加了这些打印语句:
with open('publishers.csv', 'wb') as f:
writer = csv.writer(f, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='')
for item in big_list_of_objects:
description = item.description
print "Description for %r is %r" % (item,description)
number_list = item.number_list
print "Now formatting %r for %r" % (number_list,item)
formatted_numbers = "-".join(number_list)
print repr(formatted_numbers)
writer.writerow([
description,
formatted_numbers
])
结果:
Description for 'p89' is u''
Now formatting '' for 'p89'
''
Description for 'p88' is u''
Now formatting '' for 'p88'
''
Description for 'p83' is u''
Now formatting '' for 'p83'
''
Description for 'p82' is u'in-tr-t91411'
Now formatting '' for 'p82'
''
Description for 'p81' is u''
Now formatting '' for 'p81'
''
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/path/path/path.py", line 501, in offending_function
formatted_numbers
Error: need to escape, but no escapechar set
p81 未写入 CSV - 这是发生崩溃的地方。但是,如您所见,print repr(formatted_numbers) 显示它是一个与之前相同的空白字符串。 p81 项没有 description(只是一个空白字符串),但它前面的项有 description。
【问题讨论】:
-
你在哪一行得到了这个错误?
-
错误发生在
formatted_numbers被输入writer.writerow()的那一行。我已经编辑了第一个代码 sn-p 以反映我最终使用的格式,现在回溯应该更有意义。 -
出错时能否打印出该行的描述?