我正在尝试在python3中运行以下代码,但它已被编写为我非常肯定python2:
f = open(filename, 'r')
self.lines = f.readlines()
f.close()
if self.lines[-1] != "\n" :
self.lines.append("\n")
但我收到以下错误:
File "randline.py", line 32
if self.lines[-1] != "\n" :
^
TabError: inconsistent use of tabs and spaces in indentation
你能帮我弄清楚正确的语法吗?
答案 0 :(得分:6)
Python 2允许您混合空格和制表符。所以你可以像:
那样缩进def foo():
[this is a tab it counts like eight spaces ]for each in range(5):
[this is a tab it counts like eight spaces ][space][space]print(each)
[space][space][space][space][space][space][space][space]print("Done!")
第2行和第4行将在Python 2中具有相同的缩进级别,但第2行将使用制表符执行,第4行将使用空格。打印到控制台,它将如下所示:
def foo()
for each in range(5):
print(5)
print("Done!")
但是大多数编辑器允许您设置选项卡应该有多少空格。将它设置为四,你得到这个:
def foo()
for each in range(5):
print(5)
print("Done!")
缩进仍然相同,但现在看起来缩进是错误的!
因此,Python 3不允许以不同方式缩进相同的缩进级别(即第2行和第4行)。您仍然可以混合制表符和空格,但不能在同一缩进级别。这意味着def foo():
[this is a tab it counts like eight spaces ]for each in range(5):
[this is a tab it counts like eight spaces ][space][space]print(each)
[this is a tab it counts like eight spaces ]print("Done!")
会起作用,
也会如此def foo():
[this is a tab it counts like eight spaces ]for each in range(5):
[space][space][space][space][space][space][space][space][space][space]print(each)
[this is a tab it counts like eight spaces ]print("Done!")
唯一可以使缩进看起来很奇怪的方法是将标签设置为 more 而不是八个空格,然后缩进不仅看起来明显不正确,我们会注意到一个标签将缩进12个空格(在下面的示例中),因此您意识到您插入了一个标签,而不是四个空格。
def foo():
for each in range(5):
print(each)
print("Done!")
当然,所有问题的解决方案都是在评论中写的,从不使用标签。我不确定为什么Python 3仍然允许使用标签,没有充分的理由,真的。