为什么我会得到;应为缩进块“;当我尝试运行Python脚本时?
我有一个错误,上面写着“需要一个缩进块” 你能指导我如何处理这个错误吗。谢谢:) 代码示例:为什么我会得到;应为缩进块“;当我尝试运行Python脚本时?,python,indentation,Python,Indentation,我有一个错误,上面写着“需要一个缩进块” 你能指导我如何处理这个错误吗。谢谢:) 代码示例: for ch in f: ( translatedToken = english_hindi_dict[ch] ) if (ch in english_hindi_dict) else (translatedToken = ch) Python使用缩进(代码行前面的空格/制表符)来指示代码块的开始和结束位置,相对于它前面的Python语句 因此,以PHP为例: if ($blah == 'foo')
for ch in f: ( translatedToken = english_hindi_dict[ch] ) if (ch in english_hindi_dict) else (translatedToken = ch)
Python使用缩进(代码行前面的空格/制表符)来指示代码块的开始和结束位置,相对于它前面的Python语句
因此,以PHP为例:
if ($blah == 'foo')
{
// this is line 1 of my code block
// this is line 2
}
if will_is_awesome:
print "You're right"
else:
print "You lie!"
if will_is_awesome:
print "You're right"
else:
print "You lie!"
if light_is_green:
go_now()
else:
# go_anyway()
do_something_else()
在python下,将是:
if blah == 'foo':
# this is line 1 of my code block
# this is line 2
pass
你能提供一些代码和确切的错误吗?Python是一种严重依赖缩进来决定程序结构的语言,不像C和其他一些使用大括号的语言 当你有这样的陈述时:
if true:
pass
它会抱怨,因为if
没有缩进语句。您需要将其修复为:
if true:
pass
这听起来像是您遇到的那种错误,不过如果您发布了实际代码,可能会更加明显。在说明问题时,最好给出代码,并解释预期行为是什么以及与实际行为的关系。你将使那些试图帮助你的人的生活变得更加轻松:-)
还要记住,即使代码看起来正确,也可能会出现此问题。在源代码中混合空格和制表符通常会导致这种情况。您可能将制表符与空格混合在一起。它看起来有锯齿,但实际上没有
您的代码给了我一个不同的错误:
for ch in f: \
( translatedToken = english_hindi_dict[ch] ) \
if (ch in english_hindi_dict) else (translatedToken = ch)
↑
SyntaxError: invalid syntax
也许你的意思是:
for ch in f:
if ch in english_hindi_dict:
translatedToken = english_hindi_dict[ch]
else:
translatedToken = ch
也许你的意思是:
for ch in f:
translatedToken = english_hindi_dict[ch] if ch in english_hindi_dict else ch
两者都应该运行良好,我预计第二个会比前一个更快
它们都可以优化为
translated=str(英文的chindi dict.get(ch,ch)表示ch in f)
,但这不是问题的关键。Python通过缩进来确定块,而不是像C/C++/Java/PHP/那样通过字符{
和}
来确定块。。。通过在某些其他语言中找到的if
/endif
或begin
/end
对执行或执行。所以你必须小心缩进-同时混合制表符和空格也不好。编辑答案以匹配代码示例
是无效的Python
首先,可读性计数。您的代码很难阅读,因此很难调试。什么是“ch”和“f”?更重要的是,您可以用Python编写一行程序,但不推荐这样做,因此将的放在单独的一行中。然后缩进
for chunk in file:
( translatedToken = english_hindi_dict[chunk] ) if (chunk in english_hindi_dict) else (translatedToken = chunk)
现在我们可以知道出了什么问题。在条件语句中进行变量赋值。这在Python中是不允许的。我猜你有C/C++背景,并且习惯于这样做。在Python中,为了防止编写模糊代码,您不能这样做。因此,你最终会:
for chunk in file:
translatedToken = english_hindi_dict[chunk] if chunk in english_hindi_dict else chunk
如果您使用Python2.5+,这段代码应该可以工作。但是三元运算符在较旧的Python版本中还不可用。让我们更友好一点:
for chunk in file:
translatedToken = chunk
if chunk in english_hindi_dict:
translatedToken = english_hindi_dict[chunk]
你可能会争辩说写起来要长一些,你是对的。但是你花在阅读代码上的时间比写代码要多,所以让代码易于阅读是有意义的。当然,一旦有了Python抓地力,您将尝试以更具Python风格的方式使其工作。听说过EAFTP吗
for chunk in file:
try:
translatedToken = english_hindi_dict[chunk]
except KeyError:
translatedToken = chunk
但是Python充满了惊喜,您将了解到这些经典用例中的大多数已经得到了处理。标准库通常提供一个简洁易懂的解决方案:
for chunk in file:
translatedToken = english_hindi_dict.get(chunk, chunk)
作为结论:不要像编写C那样编写Python,也不要像编写Perl那样编写Java。其他工具,其他风格
若要解决此问题,请启动编辑器的“搜索并替换”功能,并制作一个巨大的“全部替换”,将所有选项卡更改4个空格,或相反。然后缩进所有块,最后对齐同一块中的所有指令
有趣的是,以前没有出现过。毕竟,事实并非如此显而易见
在Python中,使用空格或制表符而不是“{”分隔块
因此,每当你进入一个块(一个函数、一个循环、一个类等),你都必须缩进你的代码。这不仅仅是一个好的实践,这是强制性的。如果你不这样做,你的程序就会崩溃
现在,大多数情况下,您都会出现此错误,因为您使用了缩进,但使用了制表符和空格。在Python程序中,您应该使用制表符或空格,但决不能在同一文件中同时使用
例如:
变成:
if age > 18:
print("You can vote")
在大多数语言中,您可以执行以下操作:
if (age > 18)
{
printf("You can vote")
}
在Python中,您不能:
if age > 18:
print("You can vote")
引发异常。此外,必须对齐同一块的所有指令,以便:
if age > 18:
print("You can vote")
print("How cool is that ?")
很好,但是:
if age > 18:
print("You can vote")
print("How cool is that ?")
引发了一个异常
最终,不能在同一块中混合制表符和空格。因此:
if age > 18:
print("You can vote")
print("How cool is that ?")
看起来不错,但会引发异常。若要避免此问题,请使用制表符或空格。最常用作编码样式参考的文本建议使用4个空格
大多数编辑器都有一个全局“搜索并替换”功能,可以解决任何可能出现的问题。有些编辑器像Geany,甚至有一个“用空格替换所有选项卡”功能。缩进错误可能是由很多不同的事情引起的。我想:
- 根本忘了缩进
Python使用缩进来分隔语法块。例如:
if ($blah == 'foo')
{
// this is line 1 of my code block
// this is line 2
}
if will_is_awesome:
print "You're right"
else:
print "You lie!"
if will_is_awesome:
print "You're right"
else:
print "You lie!"
if light_is_green:
go_now()
else:
# go_anyway()
do_something_else()
您将得到一个缩进错误:如果忘记缩进,则预期会出现缩进块错误。例如:
if ($blah == 'foo')
{
// this is line 1 of my code block
// this is line 2
}
if will_is_awesome:
print "You're right"
else:
print "You lie!"
if will_is_awesome:
print "You're right"
else:
print "You lie!"
if light_is_green:
go_now()
else:
# go_anyway()
do_something_else()
- 注释出缩进块
例如:
if ($blah == 'foo')
{
// this is line 1 of my code block
// this is line 2
}
if will_is_awesome:
print "You're right"
else:
print "You lie!"
if will_is_awesome:
print "You're right"
else:
print "You lie!"
if light_is_green:
go_now()
else:
# go_anyway()
do_something_else()
这将产生一个IndentationError:应该是一个缩进的块,因为注释使else:
后面的行在解析器看来是空的。添加pass
语句将解决此问题。例如:
if light_is_green:
go_now()
else:
# go_anyway()
pass
do_something_else()
- 缩进中混合了制表符和空格
制表位在不同的机器和编辑器之间可能会有所不同。如果制表位和空格混合得恰到好处,可能会出现错误,但它通常会产生缩进错误:未缩进不匹配任何外部缩进级别,因此不太可能是您的pr