我正在Python 2.7中编写一个脚本,探索多线程和队列模块的使用。该脚本只定义了两个函数,其中一个函数将在线程实例中启动以填充队列,另一个函数则将在第二个线程实例中开始以从队列中提取一些内容。然而,我甚至无法让这个脚本执行,因为它甚至在执行之前就阻塞了其中一个函数定义。有问题的代码片段是:
def listenThread(counter):
while queue.empty() != True:
try:
outcome = queue.get()
print outcome
counter -=1
print counter
except:
return 'queue.get() command loop failing.'
我得到的错误信息是:
$ python threading-and-queue-test.py
File "threading-and-queue-test.py", line 34
except:
^
IndentationError: unindent does not match any outer indentation level
$
我已经搜索了SO并检查了文档中try-except
构造的正确形式,看起来还可以。我有早期版本的代码(没有try-except
)在工作,所以我对文本编辑器TextWrangler v4.0.1产生了怀疑。
有人能建议调试方法或代码更正吗?谢谢红色
正如您已经怀疑的那样,这很可能是一个缩进错误。您的文本编辑器可能混合使用了制表符和空格。用空格替换所有选项卡(反之亦然,尽管python中的标准是4个空格),您应该会看到错误消失。
对于那些后来像我一样发现这个问题的人来说,修复TextWrangler的设置并完全停止这个问题很容易;转到"首选项"->"编辑器默认值"->"自动展开选项卡",然后将选项卡设置为4个空格。重新启动TextWrangler以使更改生效。对于继续给您带来问题的现有文档,请阅读本文。