为什么空格被视为语法错误?

时间:2014-05-08 15:20:58

标签: python syntax-error

我正在使用Python 3.1 IDLE并且发现空格(我将这样标记为_)被IDLE强调为语法错误。我想知道是否有人知道问题所在并提供解决方案。我知道它看起来不对,但下划线就是要强调IDLE说问题所在。我无法弄清楚该行和下一行的问题是什么。

    def attrSelection():
        while attrChoice!=6
            if attrChoice==1:
                attrChoice=Power
                baseAttr=int(basePow)
                attrEditor()
     _      elif attrChoice==2:
                attrChoice=Health
                baseAttr=int(baseHlth)
                attrEditor()
            elif attrChoice==3
                attrChoice=Wisdom
                baseAttr=int(baseWis)
                attrEditor()
            elif attrChoice==4:
                attrChoice=Dexterity
                baseAttr=int(baseDex)
                attrEditor()
            elif attrChoice==5:
                assignRandom()
            else:
                print('Option does not exist.  Please enter option in range 1-6.')
                attrChoice=input('Choice: ')

3 个答案:

答案 0 :(得分:5)

IDE可能会向您指出错误:

def attrSelection():
    while attrChoice!=6
    ...
        elif attrChoice==3
    ...

:6之后,您遗失了3。否则,一切看起来都很好,假设您在列出代码时没有错过缩进。

答案 1 :(得分:0)

python对空间非常挑剔,因为它使用空格来定义代码块。这是一个设计选择,它是激进的,有它的支持者和对手。但结果是,你需要非常小心你在一行代码前放置了多少空格,因为python不会理解如下:

i = 1
 j = 2
  k = 3

逻辑上,这意味着ijk不在同一个块中,这是不可能的,因为块应以特殊语句开头,通常以a结尾冒号(:)。所以python只会抛出你在代码中看到的语法错误,说空格有问题!

在你的情况下,很可能你正在使用制表符进行对齐,这使得两个字符在第8列对齐。但是在代码的某处,你有空格而不是制表符,使你的代码有5个字符在第8栏对齐

<TAB><TAB>i = 1
<TAB>     j = 2

因此,如果您将制表符视为空格,请写下以下内容:

  i = 1
     j = 2

因此python不理解你的代码!作为一般建议,只使用空格永远不会标记缩进代码,这样就不会被标签/空格搞砸了。

N.B。:正如其他人所说的那样,你的代码确实是错误的,在以下陈述的末尾遗漏了冒号:

    while attrChoice!=6
        ...
        elif attrChoice==3
        ...
正如他们指出的那样,直到现在我才把它放在我的答案中。虽然如果你的IDE在缩进中给你一个错误,但它是一个缺少的冒号,那么你应该考虑更改IDE,因为你的IDE实际上无法提供相关的错误/警告,可以帮助更快,更容易地编写代码。

答案 2 :(得分:-1)

在第二个和第二个elif之后缺少冒号。在添加这些内容之后,它为我空闲扫描。