Unexpected indentation error, but indentation looks correct

依然范特西╮ 提交于 2019-12-23 15:26:07

问题


I have been trying to run this code and it throws an indent error. No matter what I try, the result is the same.

If I delete the indent before def __str__(self): and the rest of the code, it works fine, but on output, instead of displaying the question, it shows 'Question object'.

def __str__(self):
^
IndentationError: unexpected indent

Here is the code:

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

回答1:


I guess you are mixing spaces and tabs ....

You can indent the code using autopep

please see https://pypi.python.org/pypi/autopep8




回答2:


You are mixing spaces and tabs. Assuming the code in your post is using the same indent characters that you're using in reality, here is how your code actually indents, with >--- representing one tab, and . representing one space.

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

As you can see, your indentation is not consistent. When defining both instances of __str__(), your existing indent level is 4 spaces, but the function definition is indented with 1 tab. That results in the error.

By convention, Python code should only be indented using spaces, never tabs, for exactly this reason.

See also PEP 8, specifically the sections "Indentation" and "Tabs or Spaces?"



来源:https://stackoverflow.com/questions/34559358/unexpected-indentation-error-but-indentation-looks-correct

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!