为什么这会引起缩进错误?

时间:2014-01-09 23:31:23

标签: python indentation

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说明了错误

完全混淆为什么。

3 个答案:

答案 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的官方建议是使用四个空格而不是标签,但更重要的是你必须在每一行使用相同的空格。