web-dev-qa-db-ja.com

Python NoneTypeオブジェクトは呼び出し可能ではありません(初心者)

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

なぜそのエラーが発生するのですか?

38
Seb

call to loop()の結果ではなく、関数objecthihi()関数に渡したい(hi()は何も返さないため、Noneです)。

だからこれを試してください:

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

おそらくこれはあなたがよりよく理解するのに役立つでしょう:

>>> print hi()
hi
None
>>> print hi
<function hi at 0x0000000002422648>
54
Tim Pietzcker

なぜそのエラーが発生するのですか?

loop関数に渡す最初のパラメーターは None ですが、関数は None objectではない呼び出し可能なオブジェクトを期待しているためです。

したがって、あなたの場合は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)
3
Nicoretti

呼び出し関数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
2
M.J

「TypeError: 'NoneType' object is callable」というエラーに直面しましたが、別の問題がありました。上記の手がかりを使って、デバッグできて正しくできました!私が直面した問題は次のとおりでした:私はそれについて言及しましたが、私はカスタムライブラリを書かれていて、私のファイルはそれを認識していませんでした

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.
0
asha cr