当我编译下面的 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
为什么?
View > Indentation > Intent Using Spaces
修复了错误
其他海报可能是正确的……您的标签中可能混有空格。尝试进行搜索和替换以用几个空格替换所有选项卡。
尝试这个:
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)
重要提示:空格是首选方法 - 请参阅 PEP 8 Indentation 和 Tabs or Spaces?。 (为此感谢@Siha。)
对于 Sublime Text 用户:
将 Sublime Text 设置为使用制表符进行缩进:查看 --> 缩进 --> 将缩进转换为制表符
在上面的同一子菜单中取消选中使用空格缩进选项。这将立即解决此问题。
要轻松检查制表符/空格的问题,您实际上可以这样做:
python -m tabnanny yourfile.py
或者你当然可以正确设置你的编辑器:-)
您确定没有在缩进空白中混合制表符和空格吗? (这将导致该错误。)
请注意,建议您不要在 Python 代码中使用制表符。请参阅 style guide。您应该配置 Notepad++ 为制表符插入空格。
每当我遇到此错误时,都是因为我在编辑器中以某种方式混淆了制表符和空格。
如果您使用的是 Vim,请点击 escape,然后键入
gg=G
此自动缩进所有内容并将清除您输入的所有空格。
如果您使用 Python 的 IDLE 编辑器,您可以按照它在类似错误消息之一中的建议进行操作:
1) 全选,例如 Ctrl + A
2)转到格式 - >取消区域
3)仔细检查您的缩进是否仍然正确,保存并重新运行您的程序。
我正在使用 Python 2.5.4
行:result = result * i
应该缩进(它是 for 循环的主体)。
或者 - 你有混合的空格和制表符
对于 Spyder 用户,请转到 Source > Fix Indentation 以立即解决问题
在 Atom
去
Packages > Whitespace > Convert Spaces to Tabs
然后再次检查您的文件缩进:
python -m tabnanny yourFile.py
或者
>python
>>> help("yourFile.py")
使用 Visual Studio 代码
如果您使用的是 vs code than,它将使用以下简单步骤将所有混合缩进转换为空格或制表符。
按 Ctrl + Shift + p 使用空格键入缩进 按 Enter
如果您使用记事本++,请使用扩展搜索模式执行“替换”以查找 \t 并替换为四个空格。
看起来是一个缩进问题。您不必匹配 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 文本。要解决此问题,请访问
查看 -> 缩进 -> 将缩进转换为制表符
如果您使用 colab,那么您可以通过此命令避免错误。
< Ctrl-A > < Tab > < Shift-Tab >
都是 [tab] 缩进转换为 [space] 缩进。然后确定。
这可能是因为它上面的函数没有以相同的方式缩进。 IE
class a:
def blah:
print("Hello world")
def blah1:
print("Hello world")
由于我意识到没有特定于 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 修复了错误
这是因为制表符和空格混合在一起。您可以删除所有空格并用制表符替换它们。
或者,尝试这样写:
#!/usr/bin/python -tt
在代码的开头。此行解决了制表符和空格之间的任何差异。
我昨天遇到了同样的问题,是缩进错误,使用的是 sublime 文本编辑器。我花了几个小时试图修复它,最后我将代码复制到 VI 文本编辑器中,它运行良好。 ps python 对空格太敏感,请确保不要混合空格和制表符。
对于 Atom 用户,Packages ->whitspace -> remove trailing whitespaces
这对我有用
我定义了一个函数,但除了函数注释之外没有任何内容......
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 的经验,那么您可以理解为什么我们必须留下一行。
例如:
1. def convert_distance(miles):
2. km = miles * 1.6
3. return km
在这段代码中,我也发生了同样的情况。只需删除第 2 行和第 3 行之前的缩进空格,然后使用制表符或空格。永远不要同时使用两者。在 python 中编写代码时给予适当的缩进。对于 Spyder 转到源 > 修复缩进。 VC 代码和 sublime text 或任何其他编辑器也是如此。修复缩进。
即使我的代码中没有任何选项卡,我也会收到此错误,原因是我的代码中某处有一个多余的右括号。我应该早点弄清楚这一点,因为它在一些等号之前和之后弄乱了空格......如果即使在 IDE 中运行 Reformat code
(或手动运行 autopep8)后发现任何问题,请确保所有括号匹配,从第一个等号之前/之后的奇怪空格向后开始。
就我而言,问题是 Eclipse 上的 pydev 配置
https://i.stack.imgur.com/Ve5TD.png
如果您使用 Komodo 编辑器,则可以按照类似错误消息之一中的建议进行操作:
1) 全选,例如 Ctrl + A
2)转到代码 - >取消区域
3)仔细检查您的缩进是否仍然正确,保存并重新运行您的程序。
我正在使用 Python 3.4.2