我有一个错误,上面写着"预计会有一个缩进的块",请指导我如何处理这个错误.谢谢:)
代码示例:
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)
但这不是问题的关键.
您可能正在将标签与空格混合.它看起来缩进但实际上并非如此.
你的代码给了我一个不同的错误:
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)
但这不是问题的关键.
编辑答案以匹配代码示例.
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甚至有"用空格替换所有标签"功能.
Python是一种严重依赖缩进来决定程序结构的语言,与C和其他一些使用大括号的语言不同.
如果您有以下声明:
if true: pass
它会抱怨,因为没有缩进语句if
.您需要将其修复为:
if true: pass
这听起来像是你遇到的那种错误,但是如果发布了实际代码,可能会更加明显.在陈述问题时,最好给出代码并解释预期行为是什么以及与实际行为有何关联.你会让那些试图帮助你的人生活更轻松:-)
另请注意,即使您的代码看起来正确,您也可能会遇到此问题.在源代码中混合空格和制表符通常会导致这种情况.