Python 缩进错误:未缩进与任何外部缩进级别不匹配
当我编译下面的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
为什么?其他海报可能是正确的……标签中可能有空格。尝试执行搜索和替换,以用几个空格替换所有选项卡 试试这个:
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