2012-03-19 9 views
24

mi dice la linea 1 e la linea 5 (nuovo per il debug/programmazione, non è sicuro se questo aiuta)Python NoneType oggetto non è invocabile (principiante)

def hi():  
    print 'hi' 

def loop(f, n):   #f repeats n times 
    if n<=0: 
     return 
    else: 
     f()    
     loop(f, n-1)  

loop(hi(), 5) 
hi 
TypeError: 'NoneType' object is not callable 

Perché mi dà questo errore?

risposta

36

si desidera passare alla funzione oggettohi al vostro loop() funzione, non il risultato di una chiamata a hi() (che è None dal hi() non restituisce nulla).

Quindi provare questo:

>>> loop(hi, 5) 
hi 
hi 
hi 
hi 
hi 

Forse questo vi aiuterà a capire meglio:

>>> print hi() 
hi 
None 
>>> print hi 
<function hi at 0x0000000002422648> 
+1

Ohh capisco, grazie mille – Foxic

+2

Prego. Inoltre, potresti voler richiamare la funzione 'recurse' o qualcosa di simile in quanto in realtà non effettua il loop ... –

+1

@ 30trix: ricorda di accettare la risposta se risolve il tuo problema. Benvenuti in Stackoverflow. :) – Mizipzor

2

Perché mi dà questo errore?

Perché il vostro primo parametro si passa alla funzione loop è None ma la funzione si aspetta un oggetto callable, che None oggetto non è.

Pertanto è necessario passare l'oggetto chiamabile che è nel tuo caso l'oggetto funzione hi.

def hi():  
    print 'hi' 

def loop(f, n):   #f repeats n times 
    if n<=0: 
    return 
    else: 
    f()    
    loop(f, n-1)  

loop(hi, 5) 
0

Non si deve passare la funzione di chiamata hi() alla funzione loop(), Questo darà il risultato.

def hi():  
    print('hi') 

def loop(f, n):   #f repeats n times 
    if n<=0: 
    return 
    else: 
    f()    
    loop(f, n-1)  

loop(hi, 5)   # Do not use hi() function inside loop() function 
Problemi correlati