擅长:python、mysql、java
<p>在Python中,如果一个函数从末尾掉下来而没有返回,则假定它返回<code>None</code>。你的<code>numbersOut()</code>函数没有<code>return</code>任何东西。所以,当你写</p>
<pre><code>out.writerow(numbersOut())
</code></pre>
<p>你最后打电话给<code>out.writerow(None)</code>。这将给出您看到的错误,因为<code>None</code>不是序列,<code>csv</code>模块不知道如何将<code>None</code>作为一行CSV数据写出。</p>
<p>我认为最好声明<code>numbersOut</code>以<code>out</code>作为参数:</p>
<pre><code>def numbersOut(out):
for i in range (1, 1001):
out.writerow("%s" % (i+1, ))
out.writerow("\n")
</code></pre>
<p>然后用</p>
<pre><code>numbersOut(out)
</code></pre>
<hr/>
<p>我建议你再做一些改变。</p>
<p>如果只想将单个值写入行,请替换该行</p>
<pre><code> out.writerow("%s" % (i+1, ))
</code></pre>
<p>与</p>
<pre><code> out.writerow(["%s" % (i+1, )])
</code></pre>
<p>(注意插入的<code>[</code>和<code>]</code>)。
<code>writerow</code>获取一系列值,并将每个值写出一个单独的逗号分隔的单元格。如果传递一个字符串,则该字符串将被解释为一个字符序列,并且每个字符都将在其自己的单元格中结束。</p>
<p>其次,我建议删除行<code>out.writerow("\n")</code>。当您使用<code>writerow</code>编写行时,<code>csv</code>模块将为您输出行尾。你不需要手动结束这些行。实际上,行<code>out.writerow("\n")</code>最后会在包含数字的每一行之间写入一个包含换行符的单元格。</p>