当前位置:  开发笔记 > 编程语言 > 正文

当我尝试运行Python脚本时,为什么会出现"预期的缩进块"?

如何解决《当我尝试运行Python脚本时,为什么会出现"预期的缩进块"?》经验,为你挑选了3个好方法。

我有一个错误,上面写着"预计会有一个缩进的块",请指导我如何处理这个错误.谢谢:)

代码示例:

for ch in f: ( translatedToken = english_hindi_dict[ch] ) if (ch in english_hindi_dict) else (translatedToken = ch) 

badp.. 13

您可能正在将标签与空格混合.它看起来缩进但实际上并非如此.


你的代码给了我一个不同的错误:

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(english_hindi_dict.get(ch, ch) for ch in f)但这不是问题的关键.



1> badp..:

您可能正在将标签与空格混合.它看起来缩进但实际上并非如此.


你的代码给了我一个不同的错误:

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(english_hindi_dict.get(ch, ch) for ch in f)但这不是问题的关键.



2> e-satis..:

编辑答案以匹配代码示例.

for ch in f: ( translatedToken = english_hindi_dict[ch] ) if (ch in english_hindi_dict) else (translatedToken = ch)  

只是无效的Python.

首先,可读性计数.您的代码难以阅读,因此难以调试.什么是"ch"和"f"?更重要的是,您可以在Python中使用一个衬垫,但不建议这样做,所以将它for放在一个单独的行中.然后缩进.

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

如果您使用Python 2.5+,这段代码应该可以工作.但是三元运算符还没有旧的Python版本.让我们更友好一点吧:

for chunk in file: 
    translatedToken = chunk
    if chunk in english_hindi_dict:
        translatedToken = english_hindi_dict[chunk]

你可能会说,写作时间更长,你说得对.但是你花费更多时间阅读代码而不是编写代码,因此让它易于阅读是有意义的.或者,一旦你掌握了Python,你将尝试以更加pythonic的方式工作.有没有听说过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)

作为结论:不要像编写Perl那样编写C或编写Python.其他工具,其他风格.


要解决此问题,请启动编辑器"搜索和替换"功能,然后进行巨大的"全部替换"以将所有选项卡更改为4个空格,或者相反.然后缩进所有块,最后将所有指令对齐在同一块中.

有趣的是之前没有出现在SO上.毕竟,它确实不是那么明显.

在Python中,您使用空格或制表符分隔块,而不是"{".

因此,每当你进入一个块(一个函数,一个循环,一个类等)时,你必须缩进你的代码.这不仅仅是一种良好的做法,这是强制性的.如果你不这样做,你的程序就会崩溃.

现在,大多数情况下,你得到这个错误,因为你做了缩进,但使用了制表符和空格.在Python程序中,您应该使用制表符或空格,但不能同时使用相同的文件.

例如:

if (age > 18)
{
    printf("You can vote")
}

变为:

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 ?")

看起来不错,但会引发异常.要避免此问题,只需粘贴标签或空格即可.该PEP8,作为编码风格推荐使用4位的参考文本一个最用途.

大多数编辑都有一个全局的"搜索和替换"功能,可以帮助您解决任何问题.有些像Geany或Ulipad甚至有"用空格替换所有标签"功能.



3> paxdiablo..:

Python是一种严重依赖缩进来决定程序结构的语言,与C和其他一些使用大括号的语言不同.

如果您有以下声明:

if true:
pass

它会抱怨,因为没有缩进语句if.您需要将其修复为:

if true:
    pass

这听起来像是你遇到的那种错误,但是如果发布了实际代码,可能会更加明显.在陈述问题时,最好给出代码并解释预期行为是什么以及与实际行为有何关联.你会让那些试图帮助你的人生活更轻松:-)

另请注意,即使您的代码看起来正确,您也可能会遇到此问题.在源代码中混合空格和制表符通常会导致这种情况.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有