类python中的IndentationError

时间:2018-04-21 02:37:43

标签: python python-3.x indentation

我喜欢这样的代码

# -*- coding: utf-8 -*-

class OP(object):

  def RECEIVE_MESSAGE(self):
      print("done")


  def NOTIFIED_INVITE_INTO_GROUP(self):
    print("done")

但是当我运行这个时我遇到了一些错误

Traceback (most recent call last):
File "run.py", line 2, in <module>
  from van import ERVAN
File "/home/server/.pub/van.py", line 4, in <module>
  from op import OP
File "/home/server/.pub/op.py", line 9
  def NOTIFIED_INVITE_INTO_GROUP(self):
                                    ^
IndentationError: unindent does not match any outer indentation level

任何解决方案?只有10行,但我的想法很棒

1 个答案:

答案 0 :(得分:5)

这里的代码中的空格被点替换:

#.-*-.coding:.utf-8.-*-

class.OP(object):

..def.RECEIVE_MESSAGE(self):
......print("done")

..def.NOTIFIED_INVITE_INTO_GROUP(self):
....print("done")

如您所见,第一个print("done")语句缩进了6个空格 - 将其更改为4以解决问题。

更好的是,根据PEP 8

的建议,更改所有缩进,使它们是4个空格的倍数(即0,4,8,12等)
#.-*-.coding:.utf-8.-*-

class.OP(object):
....def.RECEIVE_MESSAGE(self):
........print("done")

....def.NOTIFIED_INVITE_INTO_GROUP(self):
........print("done")

更多细节,来自Python: Myths about Indentation

  

编译器如何解析缩进?解析是   定义明确,非常简单。基本上,缩进的更改   level作为标记插入到令牌流中。

     

词法分析器(tokenizer)使用堆栈来存储缩进   水平。在开始时,堆栈只包含值0,即   是最左边的位置。每当嵌套块开始时,新的   缩进级别被推入堆栈,并且&#34; INDENT&#34;令牌是   插入到传递给解析器的令牌流中。那里   永远不会超过一个&#34; INDENT&#34;令牌连续。

     

当遇到具有较小缩进级别的行时,值   从堆栈中弹出,直到值在顶部,等于   新的缩进级别(如果找不到,则发生语法错误)。