2013-09-24 123 views
0

我有一個程序,基本上做到這一點:方法返回類型「nonetype」不是類型'字典」

class principal(): 
    def execute(self): 
     x = calculate() 
     final = x.vars1() 
     print str(type(final)) 

class calculate(): 
    def __init__(self): 
     t = self.vars1() 
    def vars1(self): 
     a = {} 
     for i in xrange(0,10): 
      a[i] = i*10 

     self.result(a) 

    def result(self,r): 
     return r 


m = principal() 
x = m.execute() 

我的回報是‘型‘NoneType’’ 爲什麼沒有返回一個字典類型,女巫我期望的是什麼?

回答

1

。在你的方法沒有回報,因此它返回None

vars1方法更改爲:

def vars1(self): 
    a = {} 
    for i in xrange(0,10): 
     a[i] = i*10 
    return a 

你不能打電話做回你嘗試過的方法。 return語句允許你將一個對象返回給函數的調用者。你的功能result是參數r基本上回到方法vars1。但是vars1不會返回任何東西,除非你在這裏也提供了返回語句。

1

,你必須返回一個快譯通,你的函數沒有返回任何值。這有時稱爲功能的結束。每種語言都有不同的看法,但最重要的是要明確。例如,在功能vars1你應該在末尾添加一個return聲明:

def vars1(self): 
    a = {} 
    for i in xrange(0,10): 
     a[i] = i*10 

    return self.result(a) 

目前,vars1(self)是「脫落到底」,沒有返回值和Python實際上將返回一個NoneType

return語句返回從函數的值。沒有表達式參數的情況下返回None。落在函數的末尾也會返回None。

這裏是doc

1

你不返回從vars1方法什麼。您需要return a而不是self.result(a)

調用另一個函數return不起作用,它看起來像你認爲它的方式。您的result方法本質上是無操作的;它只是將其輸入返回給它所調用的任何東西。它不會奇蹟般地將該輸入從堆棧上的其他方法中返回。您vars1方法沒有return語句,因此它不會返回任何東西。

你的流量看起來有點像這樣的時刻:

m.execute() 
    creates x 
    -> calls x.vars1() 
     creates a 
     -> calls x.result(a) 
      -> returns a 
      <- 
     discards the return value of x.result() 
     returns None 
     <- 
    assigns the return value of x.vars1() to final 
    prints str(type(final)), which is None 

你想要的是它看起來像這樣:

m.execute() 
    creates x 
    -> calls x.vars1() 
     creates a 
     returns a 
     <- 
    assigns the return value of x.vars1() to final 
    prints str(type(final)), which is a 
相關問題