为什么我得到“ IndentationError: 预期缩进块”?

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
732081 次浏览

如错误消息所示,您有一个缩进错误。它可能是由制表符和空格的混合引起的。

您可能需要检查空格和制表符。选项卡默认为4个空格。但是,你的“如果”和“精灵”匹配,所以我不太确定为什么。进入顶部栏中的选项,然后单击“配置 IDLE”。检查字体/选项卡右侧的缩进宽度,并确保您的缩进有那么多的空格。

我遇到了同样的问题,并且(通过 类似问题的答案)发现问题在于我没有正确地缩进 docstring。不幸的是,IDLE 在这里没有提供有用的反馈,但是一旦我修复了 docstring 缩进,问题就解决了。

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

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

避免缩进错误的好代码:

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

注意: 我不是说这个 的问题,但它是 也许吧,因为在我的情况下,它是!

实际上,关于 Python 中的缩进,您需要知道很多事情:

Python 真的很关心缩进。

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

这是在代码执行之前验证的,因此,即使没有到达带有缩进错误的代码,它也不会工作。

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

1. “ IndentationError: 預期有一個缩排的 block”

它们是造成这种错误的两个主要原因:

- 你有一个“ :”没有一个缩进块后面。

这里有两个例子:

例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

--您正在使用 Python 2.x,它混合了制表符和空格:

输入

def foo():
if 1:
print 1

请注意,if 之前有一个制表符,打印之前有8个空格。

产出:

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

很难理解这里发生了什么,似乎有一个缩进块... ... 但正如我所说的,我已经使用了制表符和空格,您永远不应该这样做。

  • 你可以得到一些信息 给你
  • 删除所有制表符并将其替换为四个空格。
  • 并将您的编辑器配置为自动执行此操作。

2. “ IndentationError: 意外缩进”

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

- 你有一个缩进的块,没有一个“ :”在它之前。

例如:

输入:

a = 3
a += 3

产出:

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

输出指出他并不期望缩进块行2,那么您应该删除它。

“ TabError: 缩进中制表符和空格的使用不一致” (只适用于 python3.x)

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


最终,回到你的问题上来:

只需查看错误的行号,并使用前面的信息修复它。

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

如果你使用的是 太棒了,你可以选择所有,点击右下角的“ Python”,确保你选择了“缩进使用空格”,并选择你的标签宽度是一致的,然后转换缩进到空格转换所有的标签到空格。

在 python 意图块意味着有每件事必须写在方式在我的情况下,我这样写它

 def btnClick(numbers):
global operator
operator = operator + str(numbers)
text_input.set(operator)

它给我一个错误,直到我用这种方式写它,这样“给出空格”然后它给我一个块,正如我试图在代码下面的函数中显示的那样

def btnClick(numbers):
___________________________
|global operator
|operator = operator + str(numbers)
|text_input.set(operator)