编辑答案以匹配代码示例。
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)
作为结论:不要尝试像编写 C 那样编写 Python,也不要像编写 Perl 那样编写 Java。其他工具,其他风格。
要解决此问题,请启动编辑器的“搜索和替换”功能,并进行巨大的“全部替换”,将所有选项卡更改为 4 个空格,反之亦然。然后缩进所有块,最后对齐同一块中的所有指令。
有趣的是,之前没有出现在SO上。毕竟,这是事实,但并不那么明显。
在 Python 中,使用空格或制表符分隔块,而不是“{”。
因此,每当你进入一个块(函数、循环、类等)时,你都必须缩进你的代码。这不仅是好的做法,而且是强制性的。如果你不这样做,你的程序就会崩溃。
现在,大多数时候,您会收到此错误,因为您确实缩进了,但使用了制表符和空格。在 Python 程序中,您应该使用制表符或空格,但切勿在同一文件中同时使用两者。
E.G:
if (age > 18)
{
printf("You can vote")
}
Becomes:
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 http://www.python.org/dev/peps/pep-0008/,最常用作编码风格参考的文本,建议使用 4 个空格。
大多数编辑器都有全局“搜索和替换”功能,可以让您解决可能遇到的任何问题。有些像 Geany 或Ulipad https://stackoverflow.com/questions/1792360/what-are-the-limits-of-python/1793767#1793767甚至有“用空格替换所有制表符”功能。