有人能告诉我为什么我会收到意外的缩进错误吗?

时间:2014-08-10 20:42:16

标签: python indentation

我正在尝试使用此代码:

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __unicode__(self):
        return self.question
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

但是我在  def unicode '中收到了意外的缩进错误然而,对我来说,这看起来是正确的。有人知道为什么吗?

1 个答案:

答案 0 :(得分:2)

您正在混合不同行上的制表符和空格,这会导致此问题。仅使用空格(并关闭编辑器中的选项卡)。

具体来说,您的pub_date行似乎缩进了4个空格,但def __unicode__行缩进了一个标签。 Python不知道您的选项卡值在编辑器中设置了什么,因此它假设选项卡表示8个空格缩进。避免这种情况的最简单(和推荐)方法是仅使用空格。

来自PEP 8

  

标签或空格?

     

空格是首选的缩进方法。

     

选项卡应仅用于与已使用选项卡缩进的代码保持一致。

     

Python 3不允许混合使用制表符和空格来缩进。

     

使用制表符和空格的混合缩进的Python 2代码应该转换为仅使用空格。

     

当使用-t选项调用Python 2命令行解释器时,它会发出有关非法混合制表符和空格的代码的警告。使用-tt时,这些警告会出错。强烈推荐这些选项!