<p>如果嵌套while循环启动,它将永远不会结束,因为它的条件不会更改条件中使用的任何变量。如果将“while”改为“if”,您可能会得到期望的结果。然后,您可以将该条件用作while循环条件</p>
<p>此外,您当前的代码在while循环中的每个迭代中的newPayrollId都是相同的。我假设try-except应该在for循环的“for-row-in-table”中</p>
<p>这也有点让人困惑</p>
<pre><code>firstSsn = ssn
</code></pre>
<p>但是在嵌套的while循环中</p>
<pre><code>if ssn is not firstSsn:
</code></pre>
<p>这永远是错误的,所以</p>
<pre><code>lastSsn = ssn
</code></pre>
<p>将是唯一运行的,但在firstSsn=ssn之前已经有lastSsn=ssn。在while条件下,您还有一个不必要的True。因此,我认为您的代码可以更改为:</p>
<pre><code>ssn = "something defined earlier"
with DBF('data.DBF', recfactory=None, load=True) as table:
for row in table:
stono = (row[1][1])
payrollid = (row[15][1])
busdate = (row[2][1])
firstname = (row[13][1])
lastname = (row[14][1])
rows = [[stono, payrollid, busdate]]
print(rows)
try:
while stono == newStoNo and payrollid == newPayrollId:
boolHasBlank = False
lastSsn = firstSsn = ssn
newPayrollId = payrollid.strip()
newStoNo = stono
Fname = firstname
Lname = lastname
except EOFError as e:
print(e)
</code></pre>
<p>当然,我没有足够的信息来了解你的代码到底是做什么的。也许有一个线程进程改变了我们看不到的snn值。作为旁注,在其他while循环中嵌套while循环通常是不好的做法。PEP20(Python的禅宗)指出,扁平比嵌套好</p>