当我编译下面的 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
为什么?
当我编译下面的 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
为什么?
其他海报可能是正确的……您的标签中可能混有空格。尝试进行搜索和替换以用几个空格替换所有选项卡。
试试这个:
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)
要轻松检查制表符/空格的问题,您实际上可以这样做:
python -m tabnanny yourfile.py
或者你当然可以正确设置你的编辑器:-)
您确定没有在缩进空白中混合制表符和空格吗?(这将导致该错误。)
请注意,建议您不要在 Python 代码中使用制表符。请参阅样式指南。您应该配置 Notepad++ 为制表符插入空格。
每当我遇到此错误时,都是因为我在编辑器中以某种方式混淆了制表符和空格。
如果您使用的是 Vim,请点击 escape,然后键入
gg=G
此自动缩进所有内容并将清除您输入的所有空格。
如果您使用 Python 的 IDLE 编辑器,您可以按照它在类似错误消息之一中的建议进行操作:
1) 全选,例如Ctrl+A
2)转到格式 - >取消区域
3)仔细检查您的缩进是否仍然正确,保存并重新运行您的程序。
我正在使用 Python 2.5.4
行:result = result * i
应该缩进(它是 for 循环的主体)。
或者 - 你有混合的空格和制表符
在原子上
去
Packages > Whitespace > Convert Spaces to Tabs
然后再次检查您的文件缩进:
python -m tabnanny yourFile.py
或者
>python
>>> help("yourFile.py")
对于 Spyder 用户,请转到 Source > Fix Indentation 以立即解决问题
如果您使用记事本++,请使用扩展搜索模式执行“替换”以查找 \t 并替换为四个空格。
使用 Visual Studio 代码
如果您使用的是 vs code than,它将使用以下简单步骤将所有混合缩进转换为空格或制表符。
按Ctrl + Shift + p
类型indent using spaces
按Enter
看起来是一个缩进问题。您不必匹配 Python 中的大括号,但您必须匹配缩进级别。
防止空格/制表符问题的最佳方法是在文本编辑器中显示不可见字符。这将为您提供一种快速的方法来防止和/或解决与缩进相关的错误。
此外,注入复制粘贴代码是此类问题的常见来源。
只是一个补充。Notepad ++中的两个缩进都有类似的问题。
外部缩进级别
转到---->搜索选项卡---->点击替换---->点击下面的扩展单选按钮--->现在用四个空格替换\t
转到---->搜索选项卡---->点击替换---->点击下面的单选按钮扩展--->现在将\n替换为空
我正在使用 Jupyter notebook 并尝试了几乎所有上述解决方案(适应我的场景)都没有用。然后我逐行删除每一行的所有空格并替换为制表符。这解决了这个问题。
对于它的价值,我的文档字符串缩进太多,这也会引发同样的错误
class junk:
"""docstring is indented too much"""
def fun(): return
IndentationError: unindent does not match any outer indentation level
我在 Ubuntu 操作系统中使用Sublime 文本。要解决此问题,请访问
查看 -> 缩进 -> 将缩进转换为制表符
这可能是因为它上面的函数没有以相同的方式缩进。IE
class a:
def blah:
print("Hello world")
def blah1:
print("Hello world")
对于 Atom 用户,Packages ->whitspace -> remove trailing whitespaces
这对我有用
由于我意识到没有特定于 的答案spyder
,所以我会添加一个:基本上,仔细查看您的if
陈述并确保所有if
,elif
并else
具有相同的间距,即它们在开始时位于同一行,如下所示:
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!")
我正在使用带有 Flask 项目的 Sublime Text 3。我使用 View > Indentation > Tab Width: 4 after unselected Indent Using Spaces 修复了错误
如果您使用 colab,那么您可以通过此命令避免错误。
- < Ctrl-A >
- <标签>
- < Shift-Tab >
都是 [tab] 缩进转换为 [space] 缩进。然后确定。
这是因为制表符和空格混合在一起。您可以删除所有空格并用制表符替换它们。
或者,尝试这样写:
#!/usr/bin/python -tt
在代码的开头。此行解决了制表符和空格之间的任何差异。
我昨天遇到了同样的问题,是缩进错误,使用的是 sublime 文本编辑器。我花了几个小时试图修复它,最后我将代码复制到 VI 文本编辑器中,它运行良好。ps python 对空格太敏感,请确保不要混合空格和制表符。
我定义了一个函数,但除了函数注释之外没有任何内容......
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
在任何情况下,请务必明确 说明为什么它是一个空函数 - 为您自己或将使用您的代码的同行
首先,提醒您有一个逻辑错误,您最好保持 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 的经验,那么您可以理解为什么我们必须留下一行。
即使我的代码中没有任何选项卡,我也会收到此错误,原因是我的代码中某处有一个多余的右括号。我应该早点弄清楚这一点,因为它在一些等号之前和之后弄乱了空格......如果即使在Reformat code
IDE 中运行(或手动运行 autopep8)后发现任何问题,请确保所有括号匹配,从后面开始第一个等号之前/之后的奇怪空格。
就我而言,问题是 Eclipse 上的 pydev 配置
如果您使用 Komodo 编辑器,则可以按照类似错误消息之一中的建议进行操作:
1) 全选,例如 Ctrl + A
2)转到代码 - >取消区域
3)仔细检查您的缩进是否仍然正确,保存并重新运行您的程序。
我正在使用 Python 3.4.2
如果你使用 Sublime text 进行 python 开发,可以通过使用 Anaconda 包来避免该错误。安装 Anaconda 后,
- 用崇高的方式打开你的文件
- 右键单击开放空间
- 选择蟒蛇
- 点击自动格式化
- 完成或按 CTRL+ALT+R。
在带有 python 插件的 intellij 中,Ctrl + Shift + Alt 重新格式化文档修复了缩进/制表符/空格问题
对于SPYDER用户:我将 spyder 3.3.2 与 python 3.7.1 一起使用,我解决了这个问题,将缩进设置为使用制表符,通过以下步骤,单击:
然后我使用制表键重置“未识别”行。
出于某种原因,如果没有这个设置,我有时会得到幽灵IndentationError。
例如:
1. def convert_distance(miles):
2. km = miles * 1.6
3. return km
在这段代码中,我也发生了同样的情况。只需删除第 2 行和第 3 行之前的缩进空格,然后使用制表符或空格。永远不要同时使用。在 python 中编写代码时给予适当的缩进。对于 Spyder 转到源 > 修复缩进。VC 代码和 sublime text 或任何其他编辑器也是如此。修复缩进。
尝试使用其他编辑器打开文件,并检查行的组织方式是否有任何问题。
我今天遇到了这个问题,没有看到我犯的错误,所以我想我会添加它——也许可以为其他人节省几个小时:)
我在函数中使用回车,在这种情况下,空白行没有正确缩进。这导致 Python 抛出此错误并退出。
由于另一件事,我遇到了同样的错误,这与制表符与空格无关。我的第一个if
缩进略多于else:
更远的缩进。如果它只有一两个空格,您可能会在一段长代码块后对其进行监督。与文档字符串相同:
"""comment comment
comment
"""
它们还需要对齐,请参阅此处同一页面上的其他答案。
用几行即可重现:
if a==1:
print('test')
else:
print('test2')
抛出:
File "<ipython-input-127-52bbac35ad7d>", line 3
else:
^
IndentationError: unindent does not match any outer indentation level
这主要是因为编辑器。尝试将制表符更改为空格(4)。最好的 python 友好 IDE 或编辑器是 pycharm,sublime,vim for linux。
即使我也遇到过同样的问题,后来我发现有一个编码问题。我建议你也改变你的编辑器。