Проблема с отступами в Python? - PullRequest
4 голосов
/ 27 января 2010

Я довольно новичок в питоне. Я впервые работаю с классами в Python. Когда я пытаюсь запустить этот скрипт, я получаю

IndentationError: ожидается отступ блок

Что с этим не так?

import random

class Individual:
    alleles = (0,1)
    length = 5
    string = ""

    def __init__(self):
        #some constructor work, here.

    def evaluate(self):
        #some stuff here.

    def mutate(self, gene):
        #mutate the given gene.

    def onePointCrossover(self, partner):
        #at some random point, crossover.

    def twoPointCrossover(self, partner):
        #at two random(?) points, crossover.

class World:
    def __init__(self):
        #stuff.

    def buildPopulation(self):
        #stuff.
        for individual in self.population():
            for i in range(0, individual.length):
                print random.random()


    def display(self):
        #print some output stuff.

if __name__ == '__main__':
    print "hi there"

Ответы [ 8 ]

11 голосов
/ 27 января 2010

Все эти методы, состоящие только из комментария.

Чтобы исправить это, например, сделайте это

def twoPointCrossover(self, partner):
        #at two random(?) points, crossover.
        pass

Комментарии не считаются компилируемыми утверждениями, поэтому выесть куча пустых блоков.Вот почему он дает вам ошибку отступа.

4 голосов
/ 27 января 2010

Если вы используете что-то, заканчивающееся :, ожидая блока с отступом, и у вас нет ничего, что вы хотите поместить туда (кроме комментария), тогда вам нужно использовать pass.

* 1005 Е.Г. *

def doNothing(self):
    pass
3 голосов
/ 27 января 2010

Когда вы просто обрисовываете в общих чертах ваши классы и у вас есть куча методов, которые ничего не делают, вам нужно вставить оператор pass, чтобы указать, что ничего не происходит.

Вот так:

class Individual:
    alleles = (0,1)
    length = 5
    string = ""

    def __init__(self):
        #some constructor work, here.
        pass

    def evaluate(self):
        #some stuff here.
        pass
    ...

Неожиданное сообщение об отступе связано с тем, что python ищет оператор с отступом, чтобы следовать определению метода.

2 голосов
/ 27 января 2010

Дважды проверьте вкладки и пробелы во всем коде, убедитесь, что вы не смешиваете их. Строка с несколькими пробелами может совпадать со строкой с одной вкладкой.

2 голосов
/ 27 января 2010
def __init__(self):
    #stuff.

Это выглядит неправильно на первый взгляд. Попробуйте изменить это на это:

def __init__(self):
    #stuff.
    pass
2 голосов
/ 27 января 2010

Если вы не сокращаете свой код для этого поста, вам понадобится pass после всех тех функций, у которых нет кода.

2 голосов
/ 27 января 2010

Изменение:

class World:
    def __init__(self):
       #stuff.

Кому:

class World:
    def __init__(self):
        #stuff
        pass

и т. Д. Для всех методов.

0 голосов
/ 27 января 2010

Другие охватили pass, поэтому я просто добавлю, что для начинающих программистов на Python может потребоваться некоторое привыкание к важности пробелов.

Пока вы не привыкнете к нему, вы можете захотеть преобразовывать вкладки в пробелы или пробелы во вкладки при сохранении файла. Лично я предпочитаю вкладки, потому что легче заметить разницу, если она отключена на одну (особенно в начале / конце вложенного блока).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...