0
class Animal(object):

        """Makes cute animals."""
        is_alive = True
        def __init__(self, name, age):
        self.name = name
        self.age = age
    # Add your method here!
    def description(self):
        print self.name
        print self.age

hippo = Animal("Steve",100) 
hippo.description() 

--代码片段一

我得到的错误:

Traceback (most recent call last):
  File "runner.py", line 125, in compilecode
  File "python", line 3
    is_alive = True
   ^
IndentationError: unexpected indent

不知道发生了什么

谁能告诉我我错在哪里?多谢!

4

3 回答 3

4

看起来您正在混合制表符和空格。这意味着看到的缩进和解释器看到的完全不同。这将导致难以注意到IndentationError的 s。

尤其是:

        """Makes cute animals."""
        is_alive = True
        def __init__(self, name, age):
        self.name = name

前两行有 8 个空格。第三个有 7 个空格和一个制表符。我不确定 Python 是否将其视为比 8 个空格更多的缩进——这是一个错误,因为这里没有缩进的理由——或者只是拒绝猜测哪个比另一个被认为是更多的缩进。但无论哪种方式,都是错误的。然后下一行有 2 个标签。

要修复此代码,请删除所有制表符,并用空格重新缩进。

将来避免这种情况的简单方法是永远不要在代码中使用制表符。

您可能还需要考虑使用更好的编辑器,即使您按下 Tab 键,它也总是会插入空格。或者,如果做不到这一点,至少还有可以向您显示标签的编辑器,这样您就可以在问题出现时发现问题。

最后,每当您IndentationError在代码看起来完全正常的情况下得到 s 时,请尝试使用-t标志(python -t myscript.py而不是python myscript.py)运行您的代码,以检查这是否是原因。

正如 Karl Knechtel 在评论中指出的那样,PEP 8(Python 风格指南)对此有一个部分

于 2013-05-14T00:55:54.833 回答
0

你需要像这样缩进 self.name 和 self.age 行。

class Animal(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

您必须在您定义的方法下方缩进文本。

于 2013-05-14T00:51:59.813 回答
0

确保你没有混淆你如何缩进的制表符和空格。选择使用所有制表符或所有空格。

于 2013-05-14T00:55:32.283 回答