Объект Python NoneType не вызывается (новичок) - PullRequest
34 голосов
/ 19 марта 2012

Я говорю мне строку 1 и строку 5 (новичок в отладке / программировании, не уверен, поможет ли это)

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

Почему это дает мне эту ошибку?

Ответы [ 4 ]

50 голосов
/ 19 марта 2012

Вы хотите передать функцию object hi в вашу loop() функцию, а не результат вызова в hi() (что составляет None, так как hi() ничего не возвращает).

Так попробуйте это:

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

Возможно, это поможет вам лучше понять:

>>> print hi()
hi
None
>>> print hi
<function hi at 0x0000000002422648>
3 голосов
/ 19 марта 2012

Почему это дает мне эту ошибку?

Поскольку ваш первый параметр, который вы передаете функции loop, равен Нет , но ваша функция ожидает вызываемый объект, который Нет объект не является.

Следовательно, вы должны передать вызываемый объект, который в вашем случае является 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)
2 голосов
/ 09 февраля 2018

Вы не должны передавать функцию вызова hi () в функцию loop (), это даст результат.

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
0 голосов
/ 26 октября 2018

Я столкнулся с ошибкой «Ошибка типа: объект NoneType не вызывается», но возникла другая проблема. С вышеупомянутыми подсказками я был в состоянии отладить и понял это правильно! Проблема, с которой я столкнулся, была: У меня была написана обычная библиотека, и мой файл не распознал ее, хотя я упоминал об этом

example: 
Library           ../../../libraries/customlibraries/ExtendedWaitKeywords.py
the keywords from my custom library were recognized and that error  was resolved only after specifying the complete path, as it was not getting the callable function.
...