为什么我会收到“IndentationError:期望缩进块”?

时间:2010-12-15 03:13:00

标签: python

if len(trashed_files) == 0 :
    print "No files trashed from current dir ('%s')" % os.path.realpath(os.curdir)
else :
    index=raw_input("What file to restore [0..%d]: " % (len(trashed_files)-1))
    if index == "*" :
        for tfile in trashed_files :
            try:
                tfile.restore()
            except IOError, e:
                import sys
                print >> sys.stderr, str(e)
                sys.exit(1)
    elif index == "" :
        print "Exiting"
    else :
        index = int(index)
        try:
            trashed_files[index].restore()
        except IOError, e:
            import sys
            print >> sys.stderr, str(e)
            sys.exit(1)

我得到了:

        elif index == "" :
        ^
    IndentationError: expected an indented block

5 个答案:

答案 0 :(得分:63)

如错误消息所示,您有缩进错误。它可能是由标签和空格的混合引起的。

答案 1 :(得分:22)

事实上,你需要了解Python中缩进的多项内容:

Python非常关心缩进。

在许多其他语言中,缩进不是必需的,但提高了可读性。在Python缩进中,替换关键字begin / end{ },因此是必要的。

这是在执行代码之前验证的,因此即使具有缩进错误的代码永远不会到达,它也不会起作用。

有不同的缩进错误,您阅读它们会有很大帮助:

<强> 1。 &#34; IndentationError:预期缩进块&#34;

这是导致此类错误的两个主要原因:

- 你有一个&#34;:&#34;没有缩进块。

以下是两个例子:

示例1,没有缩进块:

输入:

if 3 != 4:
    print("usual")
else:

输出:

  File "<stdin>", line 4

    ^
IndentationError: expected an indented block

输出表明您需要在else:语句之后有一个缩进的第4行

示例2,未缩进的块:

输入:

if 3 != 4:
print("usual")

输出

  File "<stdin>", line 2
    print("usual")
        ^
IndentationError: expected an indented block

输出表明您需要在if 3 != 4:语句之后有一个缩进的第2行

- 您正在使用Python2.x,并且有多个标签和空格:

输入

def foo():
    if 1:
        print 1

请注意,之前是否有标签,在打印之前有8个空格。

输出:

  File "<stdin>", line 3
    print 1
      ^
IndentationError: expected an indented block

很难理解这里发生了什么,似乎有一个缩进块...但正如我所说,我使用了标签和空格,你应该永远不要那样做。

  • 您可以获得一些信息here
  • 删除所有标签并将其替换为四个空格。
  • 并配置您的编辑器自动执行此操作。

<强> 2。 &#34; IndentationError:意外缩进&#34;

缩进块非常重要,但只能缩进块。 所以基本上这个错误说:

- 你有一个没有&#34;的缩进块:&#34;在它之前。

<强> 实施例

输入:

a = 3
  a += 3

输出:

  File "<stdin>", line 2
    a += 3
    ^
IndentationError: unexpected indent

输出表明他没有预料到缩进块行2,那么你应该删除它。

第3。 &#34; TabError:缩进中选项卡和空格的使用不一致&#34; (仅限python3.x)

  • 您可以获得一些信息here
  • 但基本上,你在代码中使用制表符和空格。
  • 你不想要那个。
  • 删除所有标签并将其替换为四个空格。
  • 并配置您的编辑器自动执行此操作。

<小时/> 最后,回到你的问题:

只需查看错误的行号,然后使用以前的信息进行修复。

答案 2 :(得分:2)

我遇到了同样的问题并发现(通过this answer to a similar question)问题是我没有正确地缩进文档字符串。不幸的是,IDLE在这里没有提供有用的反馈,但是一旦我修复了文档字符串缩进,问题就消失了。

具体来说 - 生成缩进错误的错误代码:

def my_function(args):
"Here is my docstring"
    ....

避免缩进错误的好代码:

def my_function(args):
    "Here is my docstring"
    ....

注意:我并不是说 这个问题,但可能,因为在我的情况下,它是!

答案 3 :(得分:0)

您可能想要检查空格和标签。选项卡默认为4个空格。但是,你的“if”和“elif”匹配,所以我不太清楚为什么。进入顶部栏中的“选项”,然后单击“配置IDLE”。检查字体/标签中右侧的缩进宽度,并确保缩进有多个空格。

答案 4 :(得分:0)

这只是一个缩进问题,因为Python非常严格。

如果您使用的是 Sublime ,则可以选择全部,点击“Python”旁边的“Python&#39;并确保你使用空格&#39;缩进。并选择Tab Width为一致,然后将Indentation转换为Spaces将所有选项卡转换为空格。