<p>因为您在其中一个分支中<code>del w</code>,这会删除变量本身,因此如果该分支在任何不是最后一个的迭代中执行,那么下一个迭代将通过尝试在未定义的<code>w</code>上<code>w.append</code>或者因为您再次尝试<code>del w</code><em>,而中断</p>
<p>一半的程序实际上没有意义,你在<code>q</code>上迭代,但是你没有使用结果,而是在删除前者之前将<code>w</code>赋值给<code>s</code>(你的迭代变量)</p>
<ul>
<li><code>s</code>与<code>q[a]</code>相同,因此您不需要<code>a</code>,只需直接使用<code>s</code>,并且通常不需要初始化循环变量,也不应该对其进行签名</li>
<li>如果您想清除<code>w</code>,可以直接使用<code>w.clear()</code>或<code>del w[:]</code></li>
<li>或者,您可以将一个新的空列表分配给它<code>w = []</code>,这并不重要,但在某些情况下确实如此</li>
<li>顺便说一句,我不认为将<code>w</code>初始化为包含空字符串的列表有什么意义,因为您正在连接一个空字符串<code>"".join([])</code>和<code>"".join([''])</code>具有相同的结果,并且从不测试它是否为空</li>
<li>虽然在这里这并不重要,但在使用文件后关闭它们也是一种很好的做法,当使用“文本模式”文件IO来明确指定编码时</li>
</ul>
<p>以下是一些清理工作:</p>
<pre class="lang-py prettyprint-override"><code>with open('programma', 'r', encoding='utf-8') as f:
contents = f.read()
time.sleep(0.5)
print("estrapolazione programma")
word = []
par = []
for char in contents:
if char == '.':
par.append(''.join(word))
word = [] # or w.clear()
else:
word.append(char)
print(par)
</code></pre>
<p>顺便说一句,整个事情都可以写下来</p>
<pre class="lang-py prettyprint-override"><code>par = contents.split('.')
</code></pre>