Python 缩进错误:未缩进与任何外部缩进级别不匹配

Python 缩进错误:未缩进与任何外部缩进级别不匹配,python,indentation,Python,Indentation,当我编译下面的Python代码时,我得到 缩进错误:未缩进与任何外部缩进级别不匹配 为什么?其他海报可能是正确的……标签中可能有空格。尝试执行搜索和替换,以用几个空格替换所有选项卡 试试这个: import sys def Factorial(n): # return factorial result = 1 for i in range (1,n): result = result * i print "factorial is ",result

当我编译下面的Python代码时,我得到

缩进错误:未缩进与任何外部缩进级别不匹配



为什么?

其他海报可能是正确的……标签中可能有空格。尝试执行搜索和替换,以用几个空格替换所有选项卡

试试这个:

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)

行:
result=result*i
应该缩进(它是for循环的主体)


或者-您混合了空格和制表符

您确定缩进空格中没有混合制表符和空格吗?(这将导致该错误。)


注意,建议不要在Python代码中使用制表符。看。您应该配置Notepad++为选项卡插入空格。

每当我遇到此错误时,都是因为我在编辑器中将选项卡和空格搞混了

要轻松检查选项卡/空格是否存在问题,实际上可以执行以下操作:

python -m tabnanny yourfile.py

或者您可以正确设置编辑器,当然:-)

看起来是缩进问题。在Python中,您不必匹配花括号,但必须匹配缩进级别

防止空格/制表符问题的最佳方法是在文本编辑器中显示不可见字符。这将为您提供一种防止和/或解决缩进相关错误的快速方法


此外,注入复制粘贴的代码是此类问题的常见根源。

如果使用Python的空闲编辑器,则可以按照类似错误消息之一中的建议执行:

1) 选择全部,例如Ctrl+A

2) 转到“格式->取消设置区域”

3) 再次检查缩进是否正确,保存并重新运行程序


我使用的是Python 2.5.4,这可能是因为上面的函数没有以相同的方式缩进。 i、 e


这是因为选项卡和空格混合在一起。 您可以删除所有空格,并将其替换为选项卡

或者, 试着这样写:

#!/usr/bin/python -tt

在代码的开头。这一行解决了制表符和空格之间的任何差异。

在我的例子中,问题是Eclipse上pydev的配置


如果使用记事本++,请使用扩展搜索模式进行“替换”,以查找\t并替换为四个空格。

重要信息
空格是首选方法-参见PEP008和。(这要感谢@Siha。)

对于
Sublime Text
用户:

升华文本设置为使用制表符进行缩进:
查看
-->
缩进
-->
将缩进转换为制表符

取消选中上面同一子菜单中的使用空格缩进的
选项。

这将立即解决这个问题。

我昨天也遇到了同样的问题,那就是缩进错误,当时正在使用sublime文本编辑器。我花了好几个小时试图修复它,最后我把代码复制到VI文本编辑器中,它工作得很好。ps python对空格太敏感,请确保不要将空格和制表符混合使用。

如果使用Komodo editor,您可以按照类似错误消息中的建议执行操作:

1) 选择全部,例如Ctrl+A

2) 转到代码->解除管辖区域

3) 再次检查缩进是否正确,保存并重新运行程序


我正在使用Python 3.4.2

如果您正在使用Sublime文本进行Python开发,您可以通过使用包Anaconda来避免错误

  • 在sublime中打开您的文件
  • 右键单击开放空间
  • 选择水蟒
  • 点击自动格式化
  • 完成或按CTRL+ALT+R
  • Packages > Whitespace > Convert Spaces to Tabs
    
    然后再次检查文件缩进:

    python -m tabnanny yourFile.py
    


    如果您正在使用Vim,请点击escape,然后键入

    gg=G


    这将自动缩进所有内容,并将清除您抛出的所有空格。

    对于Atom用户,
    Packages->whitspace->remove training whitespaces

    这对我来说很有效

    只是一个补充。我在记事本++中的两个缩进都有类似的问题

  • 未接受压痕
  • 外压痕水平

    转到-->搜索选项卡-->点击替换-->点击下面的单选按钮扩展现在用四个空格替换\t

    转到---->搜索选项卡---->点击替换-->点击下面的单选按钮扩展——>现在不替换\n


  • 由于我意识到没有特定于
    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!")
    
    def您的选择(答案):
    如果答案>5:
    打印(“你太老了”)
    elif回答者1:
    打印(“欢迎来到学步儿童俱乐部!”)
    其他:
    打印(“不用担心,伙计!”)
    
    我定义了一个函数,但除了函数注释外,它没有任何内容

    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
    

    在任何情况下,请确保清楚说明为什么这是一个空函数-对于你自己,或者对于将使用你的代码的同事来说

    我使用的是Jupyter笔记本电脑,并且尝试了几乎所有上述解决方案(适应我的场景)但没有用。然后我一行一行地删除了每行的所有空格,并用tab替换。这就解决了问题。

    首先,提醒您存在逻辑错误,您最好保持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
    
    留下一行将告诉pythonshell FOR语句已经结束。如果您有使用
    def foo(bar):
        '' Some awesome comment. This comment could be just one space.''
    
    def foo(bar):
        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
    
    class junk: 
         """docstring is indented too much""" 
        def fun(): return