2010-01-26 213 views
4

我很新的python。這是我第一次在python中使用類。當我嘗試運行此腳本時,我收到Python縮進問題?

IndentationError: expected an indented block

這是什麼問題?

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" 

回答

11

所有那些只包含註釋的方法。

爲了解決這個問題,例如,做這個

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

的意見並不算作編譯語句,所以你有一大堆的空塊。這就是爲什麼它給你的縮進錯誤。

+2

我以爲他爲了這篇文章而用評論代替了代碼 - 也許不是。 – Trent 2010-01-26 22:52:32

4

如果您使用以:結尾的內容,並且您沒有任何要放在其中的內容(除了註釋),那麼您需要使用pass

E.g.

def doNothing(self): 
    pass 
2

變化:

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

要:

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

等所有方法。

2

除非你縮寫這篇文章的代碼,否則你需要pass所有那些沒有任何代碼的函數。

2
def __init__(self): 
    #stuff. 

第一眼看起來不對。嘗試將其更改爲這樣:

def __init__(self): 
    #stuff. 
    pass 
3

當你只是概括類和有一堆這什麼也不做的方法,你需要插入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

仔細檢查所有代碼中的製表符和空格,確保沒有混合它們。具有多個空格的行可以與具有單個標籤的行相同。

0

其他已經涵蓋pass,所以我只是補充說,對於開始的python程序員來說,它可能需要一些習慣於空白的重要性。

直到您習慣了它,您可能希望養成一個文件時,將製表符轉換爲空格或空格轉換爲製表符的習慣。就我個人而言,我更喜歡製表符,因爲如果它被關閉(特別是在嵌套塊的開始/結束處),則更容易區分它們。