_错误:需要序列[Python]

2024-03-28 10:50:56 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我的全部代码:

import csv

def numbersOut():
    for i in range (1, 1001):
        out.writerow("%s" % (i+1, ))
        out.writerow("\n")

csvname = raw_input("Enter desired filename: ")
headers = ["ID", "Student", "Grade"]

out = csv.writer(open(csvname + ".csv","w"), delimiter=',', lineterminator='\n', quoting=csv.QUOTE_ALL)
out.writerow(headers)
out.writerow(numbersOut())

抛出“sequence expected”错误的部分是第14行,即这一行:out.writerow(numbersOut())

基本上,我要做的是使用函数numbersOut()在CSV文件中放置1000行,每个行都有自己的ID(行1(减去头)将=1,行2将=2,等等)。我设法用射程把它们排成一行,但那不是我需要的。

但是,当我试图使用我的函数时,总是会遇到一个错误。我不确定这是我如何调用它的问题,还是函数本身的问题。

有什么想法吗?如果有什么需要澄清的,请问我,我有一个不讲道理的习惯。

提前谢谢!

编辑:按要求回溯:

Traceback (most recent call last):
  File "writer.py", line 14, in <module>
   out.writerow(numbersOut())
_csv.Error: sequence expected

Tags: csv函数代码inimportid错误out
2条回答

在Python中,如果一个函数从末尾掉下来而没有返回,则假定它返回None。你的numbersOut()函数没有return任何东西。所以,当你写

out.writerow(numbersOut())

你最后打电话给out.writerow(None)。这将给出您看到的错误,因为None不是序列,csv模块不知道如何将None作为一行CSV数据写出。

我认为最好声明numbersOutout作为参数:

def numbersOut(out):
    for i in range (1, 1001):
        out.writerow("%s" % (i+1, ))
        out.writerow("\n")

然后用

numbersOut(out)

我建议你再做一些改变。

如果只想将单个值写入行,请替换该行

        out.writerow("%s" % (i+1, ))

        out.writerow(["%s" % (i+1, )])

(注意插入的[])。 writerow获取一系列值,并将每个值写出一个单独的逗号分隔的单元格。如果传递一个字符串,则该字符串将被解释为一个字符序列,并且每个字符都将在其自己的单元格中结束。

其次,我建议删除行out.writerow("\n")。当您使用writerow编写行时,csv模块将为您输出行尾。你不需要手动结束这些行。实际上,行out.writerow("\n")最后会在包含数字的每一行之间写入一个包含换行符的单元格。

以下工作:

import csv

def numbersOut():
    for i in range (1, 1001):
        seq=[i,i,i,i]
        out.writerow(seq)
        out.writerow("\n")

csvname = raw_input("Enter desired filename: ")
headers = ["ID", "Student", "Grade"]

out = csv.writer(open(csvname + ".csv","w"), delimiter=',', lineterminator='\n', quoting=csv.QUOTE_ALL)
out.writerow([headers])
out.writerow([numbersOut()]) # writerow() expects a sequence a list or a tuple.  

相关问题 更多 >