擅长:python、mysql、java
<p>正如评论者建议的那样,试着打印这一行来查看真正导致问题的那一行(但是一定要在<code>line.split</code>之前插入打印)。在</p>
<p>最有可能的问题是末尾有一个空行,它被读作换行符。如果是这样,最简单的解决方案可能是在If语句中附加另一个条件:</p>
<pre><code>file = open("myfreefall.txt","r")
for line in file:
if not line.startswith('#') and line != '\n':
# or, more robust:
if not line.startswith('#') and len(line) == 4:
v,a,t,y= line.split(' ')
</code></pre>
<p>或者尝试一下/除了:</p>
^{2}$
<p>第二个if语句更健壮,因为它只会在有四个列表项要处理的情况下尝试提取四个变量。任何其他情况(从中提取更多或更少的条目)将被忽略。您可以根据您的需要对其进行更多的调整,例如,如果您还想允许阅读较长的行,可以将其更改为“len(line)>=4”。在</p>
<p>老实说,我想不出try/except变体有什么特别的优势,但是既然我刚写出来,我还是把它放在里面吧。事实上,它可能有点过于健壮,因为它也会跳过那些由于<em>其他</em>而导致值错误的行,而不是要处理的条目太少。在</p>
<p>你所描述的第二次尝试失败是完全有道理的。
您将告诉python将一个由四个条目组成的列表分成五个变量,v、a、t、y和test。这就是错误所指的,当它说“预期5,得到4”。您的错误行为可能会改变,因为代码现在失败得更快。在它为所有行工作之前,除了最后一行,只有一个列表条目可以使用。当你改变为五个变量时,第一行就出现了一个错误,这里有四个条目,但现在你要求的是五个。在</p>