for bucketLabel, eventList in test_source_json.iteritems():
if bucketLabel == "spotlight":
for event in eventList:
try:
for key in source_keys:
if key not in event:
if key not in responseDictionary[currentTestName][url]:
responseDictionary[currentTestName][url][key] = list()
responseDictionary[currentTestName][url][key].append(event)
except:
exc_type, exc_obj, exc_tb = sys.exc_info()
logging.info("caught exception %s, and obj %s at line number %s" % (exc_type, exc_obj, exc_tb.tb_lineno))
continue
此代码在第4行try:
处引发缩进错误
http://repl.it/N7W说明了错误
完全混淆为什么。
答案 0 :(得分:5)
你在该行上使用制表符而不是空格
答案 1 :(得分:4)
问题 - 就像在这种情况下经常发生的那样 - 是你正在混合标签和空格。
第2行和第3行用标签缩进;第3行以两个制表符开头。大概在文本编辑器中看起来像8个空格,但就Python而言,它是16个空格。
第4行缩进12个空格。所以,在你的编辑器中,它看起来比第3行更缩进。但是对于Python来说,它的 less 缩进。因此错误。
解决方案是始终使用空格,而不是标签。 (或者,你总是可以使用标签,只要你不混合它们......但在很多方面,空格总是更容易和更好。)
大多数编辑器都可以配置为执行此操作,并显示与空格明显不同的选项卡。那些不能(如记事本)可能不应该用于编程。
您还应该使用-t
or -tt
标志运行Python来诊断IndentationError
,因为它会告诉您使用制表符和空格不一致。 tabnanny
模块/脚本也很有帮助。
答案 2 :(得分:2)
Python要求您使用制表符或空格进行缩进,而不是两者都使用。 Python的官方建议是使用四个空格而不是标签,但更重要的是你必须在每一行使用相同的空格。