意外的缩进错误,但缩进看起来正确

时间:2016-01-01 19:36:45

标签: python django indentation

我一直在尝试运行此代码,它会抛出缩进错误。无论我尝试什么,结果都是一样的。

如果我删除def __str__(self):之前的缩进以及其余代码,它可以正常工作,但在输出时,它会显示“问题对象”而不是显示问题。

def __str__(self):
^
IndentationError: unexpected indent

以下是代码:

from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE) 
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

2 个答案:

答案 0 :(得分:3)

我猜你在混合空格和标签......

您可以使用autopep缩进代码

请参阅https://pypi.python.org/pypi/autopep8

答案 1 :(得分:1)

您正在混合空格和标签。假设您帖子中的代码使用了您在实际中使用的相同缩进字符,以下是您的代码实际缩进的方式,其中>---代表一个标签,.代表一个空格。

from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone

class Question(models.Model):
....question_text = models.CharField(max_length=200)
....pub_date = models.DateTimeField('date published')

>---def __str__(self):
....>---return self.question_text

....def was_published_recently(self):
>---....return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
....question = models.ForeignKey(Question, on_delete=models.CASCADE) 
....choice_text = models.CharField(max_length=200)
....votes = models.IntegerField(default=0)

>---def __str__(self):
....>---return self.choice_text

如您所见,您的缩进不一致。定义__str__()的两个实例时,现有的缩进级别为4个空格,但函数定义缩进为1个制表符。这会导致错误。

按照惯例,Python代码只应使用空格缩进,而不是缩进,正是出于这个原因。

另请参阅PEP 8,特别是" Indentation"和" Tabs or Spaces?"