理解Python 2.7中的缩进错误

5

当我编写Python代码时,经常会遇到很多缩进错误。有时候删除并重新编写一行代码后,错误会消失。能否为新手提供Python中IndentationErrors的高级解释?

下面是最近在玩CheckIO时出现的一个缩进错误示例,但我仍然无法解决:

def checkpass(data):
     """Checks password for >=10 char + 1 number + 1 LC letter + 1 UC letter"""

     passlist = []
     uclist = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
               'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 
               'Y', 'Z']
     lclist = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
               'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
               'y', 'z']

     blah blah.. more code

当我调用Python脚本时,出现以下错误:

$ python passcheck.py
File "passcheck.py", line 5
uclist = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
                                                                    ^
IndentationError: unindent does not match any outer indentation level

2
请不要在您的代码中混用制表符和空格。要么使用制表符,要么使用空格。检查您的编辑器 - 大多数编辑器通常都有将制表符转换为空格的功能。 - Burhan Khalid
1个回答

6
这种问题通常是由于混用制表符和空格造成的。
有些编辑器可能会将Tab显示为4个空格,但在Python 2.x中,Tab被解释为8个空格,因此即使编辑器显示多行缩进在同一级别,它们对于Python来说可能并不真正处于同一级别(特别是如果编辑器将制表符解释为4个空格)。
在Python 3.x中,您根本不允许混用制表符和空格,否则会在同一Python脚本中混用制表符和空格时引发语法错误。
理想情况下,您应该在整个脚本中完全使用制表符或完全使用空格,其中4个空格是缩进的推荐实践。

3
在上面的基础上添加,我们可以调整编辑器设置来符合制表符的空格。 例如,我个人会在我的 .vimrc 文件中添加以下条目以进行 vim 编辑: set tabstop=4 set shiftwidth=4 set expandtab - Shrey
Anand,非常感谢你清晰明了的解释。Shrey,感谢你关于编辑器设置的有益建议。昨晚我在互联网上阅读了所有与IndentationErrors有关的内容,但没有发现任何关于混合Tab和空格的信息。虽然可能是我不够擅长使用谷歌.. :) - Charles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接