2012-03-19 20 views
24

que me dice que la línea 1 y la línea 5 (nuevo en la depuración/programación, no está seguro de si eso ayuda)objeto Python NoneType no es exigible (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 

¿Por qué se me da ese error?

Respuesta

36

que desea pasar a la función objetohi a su función loop(), no el resultado de una llamada a hi() (que es None desde hi() no devuelve nada).

Así que trate esto:

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

Tal vez esto le ayudará a entender mejor:

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

Ohh Yo veo, muchas gracias – Foxic

+2

De nada. Además, es posible que desee llamar a su función 'recurse' o algo similar, ya que en realidad no se repite ... –

+1

@ 30trix: recuerde aceptar la respuesta si resolvió su problema. Bienvenido a Stackoverflow. :) – Mizipzor

2

¿Por qué se me da ese error?

Debido a que su primer parámetro que se pasa a la función loop es None pero su función se esperaba un objeto exigible, que no es objeto None.

Por lo tanto, debe pasar el objeto invocable que es en su caso el objeto de función 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

No debe pasar la función de llamada hi() a la función de bucle(), Esto dará el resultado.

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 
Cuestiones relacionadas