Python NoneType对象不可调用(初学者)

时间:2012-03-19 10:54:18

标签: 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

为什么它会给我这个错误?

4 个答案:

答案 0 :(得分:50)

您希望将函数 object hi传递给loop()函数,而不是将调用的结果传递给hi()None hi(),因为>>> loop(hi, 5) hi hi hi hi hi 不会返回任何内容。

所以试试这个:

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

也许这会帮助你更好地理解:

{{1}}

答案 1 :(得分:3)

  

为什么它会给我这个错误?

因为您传递给loop函数的第一个参数是None,但您的函数期望一个可调用对象,而None对象不是。

因此,你必须传递callable-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)

答案 2 :(得分:2)

你不应该将调用函数hi()传递给loop()函数,这将给出结果。

  constructor(public db: AngularFireDatabase) {
    let currentUser = firebase.auth().currentUser;
    this.uid = currentUser.uid;
    this.getUser().subscribe(u=>{
        console.log('[constructor]user: ', u);
    });//subscribe to the observable.
  }

答案 3 :(得分:0)

我遇到错误“ TypeError:'NoneType'对象不可调用”,但是出现了另一个问题。 基于上述线索,我能够进行调试并正确完成! 我面临的问题是: 我已经写了custome Library,尽管我已经提到它,但我的文件无法识别

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.