IndentationError: unindent 与任何外部缩进级别都不匹配,尽管缩进看起来正确[重复]
- 2024-12-09 08:30:00
- admin 原创
- 148
问题描述:
当我编译下面的 Python 代码时,我得到
IndentationError:unindent 与任何外部缩进级别都不匹配
import sys
def Factorial(n): # Return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
为什么?
解决方案 1:
导致此错误的一个可能原因是缩进时空格和制表符混在一起。请尝试执行搜索和替换,将所有制表符替换为几个空格。
尝试一下:
import sys
def Factorial(n): # return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
print Factorial(10)
解决方案 2:
重要的:
空格是首选方法 - 请参阅 PEP 8缩进和制表符或空格?。 (感谢@Siha。)
对于Sublime Text用户:
设置 Sublime Text 使用制表符进行缩进:菜单视图→缩进→将缩进转换为制表符
在上面相同的子菜单中取消选中“使用空格缩进”选项。这将立即解决此问题。
解决方案 3:
为了轻松检查制表符/空格的问题,您实际上可以这样做:
python -m tabnanny yourfile.py
或者你当然可以正确设置你的编辑器:-)
解决方案 4:
您确定在缩进空白处没有混合制表符和空格吗?(否则会导致错误。)
注意,建议不要在 Python 代码中使用制表符。请参阅样式指南。您应该配置 Notepad++ 以插入空格作为制表符。
解决方案 5:
每当我遇到此错误时,都是因为我在编辑器中混淆了制表符和空格。
解决方案 6:
如果你正在使用 Vim,请按 Esc,然后输入
gg=G
这会自动缩进所有内容并清除您输入的任何空格。
解决方案 7:
如果您使用 Python 的 IDLE 编辑器,您可以按照类似错误消息中的建议进行操作:
1)全选,例如Ctrl
+A
2)转到格式->取消制表符区域
3)仔细检查您的缩进是否仍然正确,保存并重新运行您的程序。
我正在使用 Python 2.5.4
解决方案 8:
使用Visual Studio Code
如果您使用的是 Visual Studio Code,那么它将使用以下简单步骤将所有混合缩进转换为空格或制表符。
按
Ctrl
+Shift
+P
使用空格缩进类型
按
Enter
解决方案 9:
该行:result = result * i
应该缩进(它是 for 循环的主体)。
或者 - 您混合了空格和制表符
解决方案 10:
对于Spyder用户,请访问
菜单来源→修复缩进
立即修复该问题。
解决方案 11:
在Atom上
前往
Packages > Whitespace > Convert Spaces to Tabs
然后再次检查文件缩进:
python -m tabnanny yourFile.py
或者
>python
>>> help("yourFile.py")
解决方案 12:
如果您使用Notepad++,请使用扩展搜索模式执行“替换”以查找 \t 并替换为四个空格。
解决方案 13:
如果您使用Colaboratory,那么您可以通过以下命令来避免错误:
Ctrl
+A
Tab
Shift
+Tab
都是将 [tab] 缩进转换为 [space] 缩进。然后OK
。
解决方案 14:
看起来是缩进问题。在 Python 中,您不必匹配花括号,但必须匹配缩进级别。
防止空格/制表符问题的最佳方法是在文本编辑器中显示不可见字符。这将为您提供一种快速防止和/或解决缩进相关错误的方法。
此外,注入复制粘贴的代码是此类问题的常见根源。
解决方案 15:
不管怎样,我的文档字符串缩进太多了,这也会引发同样的错误
class junk:
"""docstring is indented too much"""
def fun(): return
IndentationError: unindent does not match any outer indentation level
解决方案 16:
我在Ubuntu操作系统中使用Sublime Text。要解决此问题,请转到:
菜单视图→缩进→将缩进转换为制表符。
解决方案 17:
只是补充一下。我在 Notepad++ 中遇到了类似的缩进问题。
异常压痕
外部缩进级别
转到 ----> 搜索选项卡 ----> 点击替换----> 点击下面的扩展单选按钮---> 现在用四个空格替换 \t
转到 ----> 搜索选项卡 ----> 点击替换----> 点击下面的扩展单选按钮---> 现在用空值替换 \n
解决方案 18:
我使用的是Jupyter Notebook,尝试了之前答案中的几乎所有解决方案(适应我的场景),但都无济于事。然后我逐行检查,删除每行的所有空格并替换为制表符。这解决了问题。
解决方案 19:
这可能是因为上面的函数没有以相同的方式缩进。即
class a:
def blah:
print("Hello world")
def blah1:
print("Hello world")
解决方案 20:
由于我意识到没有针对Spyder 的具体答案,因此我将添加一个:
基本上,仔细查看您的if
语句并确保所有if
s、elif
s 和else
s 具有相同的间距,也就是说,它们在开头位于同一行,如下所示:
def your_choice(answer):
if answer>5:
print("You're overaged")
elif answer<=5 and answer>1:
print("Welcome to the toddler's club!")
else:
print("No worries, mate!")
解决方案 21:
例如:
1. def convert_distance(miles):
2. km = miles * 1.6
3. return km
在这段代码中,我也遇到了同样的情况。只需删除第 2 行和第 3 行之前的缩进空格,然后使用制表符或空格即可。切勿同时使用两者。在用 Python 编写代码时,请提供适当的缩进。
对于Spyder,转到菜单Source → Fix Indentation 。对于Visual Studio Code、Sublime Text或任何其他编辑器也是如此。修复缩进。
解决方案 22:
我在Flask项目中使用Sublime Text 3。在取消选择使用空格缩进后,我使用菜单视图→缩进→ Tab Width : 4修复了错误。
解决方案 23:
首先,只是提醒您存在一个逻辑错误,您最好保持 result=1,否则即使循环运行后您的输出仍将是 result=0。
其次你可以这样写:
import sys
def Factorial(n): # Return factorial
result = 0
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
留下一行会告诉 Python Shell FOR 语句已结束。如果你有使用 Python Shell 的经验,那么你就能理解为什么我们必须留下一行。
解决方案 24:
纠正缩进错误的另一种方法是将代码复制到 PyCharm(如果您已经配置好了)并重新格式化文件,它将自动正确缩进。
解决方案 25:
这是因为制表符和空格混用了。您可以删除所有空格并将其替换为制表符。
或者,尝试这样写:
#!/usr/bin/python -tt
在代码的开头。此行解决了制表符和空格之间的任何差异。
解决方案 26:
对于Atom用户,软件包→空格→删除尾随空格。这对我有用。
解决方案 27:
我定义了一个函数,但是除了函数注释之外它没有任何内容......
def foo(bar):
# Some awesome temporary comment.
# But there is actually nothing in the function!
# D'Oh!
它喊道:
File "foobar.py", line 69
^
IndentationError: expected an indented block
^
(注意标记指向的那一行是空的)
--
多种解决方案:
1:只需注释掉该函数
2:添加函数注释
def foo(bar):
'' Some awesome comment. This comment could be just one space.''
3:添加一行不做任何事
def foo(bar):
0
无论如何,一定要清楚地说明 为什么它是一个空函数——对于您自己,或者对于将使用您的代码的同事来说。
解决方案 28:
尽管我的代码中没有任何制表符,但我还是遇到了此错误,原因是我的代码中某处有一个多余的右括号。我应该早点解决这个问题,因为它弄乱了一些等号前后的空格……
如果即使在 IDE 中运行重新格式化代码(或手动运行 autopep8)后仍发现任何异常,请确保所有括号都匹配,从第一个等号之前/之后的奇怪空格向后开始。
解决方案 29:
我得到了以下类似的错误:
IndentationError:预期一个缩进的块
当我忘记放入pass
下面的类或函数时,其他代码就在类或函数后面写入,如下所示:
class Person:
# pass
x = 10
def test():
# pass
x = 10
并且,当类或函数之后没有写入其他代码时,如下所示:
class Person:
# pass
# x = 10
def test():
# pass
# x = 10
我收到以下错误:
SyntaxError:解析时出现意外的 EOF
解决方案 30:
我昨天也遇到了同样的问题。这是一个缩进错误。我当时使用的是Sublime Text编辑器。
我花了好几个小时试图修复它,最后我把代码复制到了vi文本编辑器中。它工作得很好。
PS:Python 对空格过于敏感。请确保不要混淆空格和制表符。