为什么我会收到“IndentationError:预期缩进的块”?[重复]
- 2025-03-20 08:46:00
- admin 原创
- 42
问题描述:
考虑:
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
解决方案 1:
如错误消息所示,您遇到了缩进错误。这可能是由于制表符和空格混用造成的。
解决方案 2:
事实上,你需要了解有关 Python 缩进的多个事项:
Python 确实很关心缩进。
在许多其他语言中,缩进不是必需的,但可以提高可读性。在 Python 中,缩进取代了关键字begin / end
或{ }
,因此是必需的。
这在代码执行之前进行验证,因此即使从未遇到过出现缩进错误的代码,它也不会起作用。
有不同的缩进错误,阅读它们会很有帮助:
1. “IndentationError:预期缩进块”
出现此类错误的主要原因有两个:
- 您有一个“:”,后面没有缩进块。
以下有两个示例:
示例 1,无缩进块:
输入:
if 3 != 4:
print("usual")
else:
输出:
File "<stdin>", line 4
^
IndentationError: expected an indented block
输出表明你需要在第 4 行的else:
语句后有一个缩进块
示例 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
请注意,if 之前有一个制表符,print 之前有 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 行,那么您应该将其删除。
3. “TabError: 缩进中制表符和空格的使用不一致”(仅限 python3.x)
您可以在这里获取一些信息。
但基本上,您在代码中使用了制表符和空格。
你不想要那个。
删除所有制表符并用四个空格替换它们。
并配置您的编辑器以自动执行该操作。
最后,回到你的问题:
只需查看错误的行号,然后使用前面的信息进行修复。
解决方案 3:
我遇到了同样的问题,并发现(通过对类似问题的回答)问题在于我没有正确缩进文档字符串。不幸的是,IDLE 在这里没有提供有用的反馈,但是一旦我修复了文档字符串缩进,问题就消失了。
具体来说——产生缩进错误的错误代码:
def my_function(args):
"Here is my docstring"
....
避免缩进错误的良好代码:
def my_function(args):
"Here is my docstring"
....
注意:我不是说这是问题,但这可能是问题,因为就我而言,确实是问题!
解决方案 4:
您可能需要检查空格和制表符。制表符默认为 4 个空格。但是,您的“if”和“elif”匹配,所以我不太清楚为什么。进入顶部栏中的选项,然后单击“配置 IDLE”。检查字体/制表符右侧的缩进宽度,并确保缩进有那么多空格。
解决方案 5:
这只是一个缩进问题,因为 Python 对此非常严格。
如果您使用的是Sublime Text,则可以选择全部,单击“Python”旁边的右下角,并确保选中“使用空格缩进”。选择您的制表符宽度保持一致,然后将缩进转换为空格以将所有制表符转换为空格。
解决方案 6:
在 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)
扫码咨询,免费领取项目管理大礼包!