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

4
我一直在尝试运行这段代码,但它会抛出缩进错误。无论我尝试什么,结果都是一样的。 如果我删除 def __str__(self): 和其余代码前面的缩进,它就能正常工作,但输出时,它显示的不是问题,而是 'Question object'。
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
你是不是把制表符和空格混用了? - Eugene Primako
你是用制表符还是空格来缩进呢? - Iron Fist
只使用空格块。 - Narayan C.R
2个回答

3

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?" 部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接