python疑难杂症(6):咱也说,Python报错信息: TypeError: ‘list‘ object is not callable,原因和注意事项

例如:python的报错信息如TypeError: 'float' object is not callableTypeError: 'list' object is not callable等类似的报错信息“TypeError: '????' object is not callable”,这类的object is not callable错误,在实际应用中常常出现,但是错误又很隐蔽,查找起来比较困难,而网上搜到的答案都是就事论事,没有说出问题的实质内容,下面将对这类问题进行较全面的论述,起到举一反三的作用。

先解释一下这个问题的具体含义:XXX 不是一个 内置函数,意思是引用的位置对象并不是一个函数,但是被当做函数使用了。

举例1:

def  a():

    print("test")

return  "ok"

… …  

a="aa"

a

kk=a()

输出:

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-29-9fd94aa867bc> in <module>

      1 a="aa"

      2 a

----> 3 kk=a()

TypeError: 'str' object is not callable

举例2:

def  a():

    print("test")

    return  "ok"

a=5.6

s1=a()

print(s1)

输出:

TypeError                                 Traceback (most recent call last)

<ipython-input-40-b2b73603b799> in <module>

      4

      5 a=5.6

----> 6 s1=a()

      7 print(s1)

TypeError: 'float' object is not callable

举例3:

a=["aa","bb"]

a

kk=a()

输出:

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-33-7e2c85bbb287> in <module>

      1 a=["aa","bb"]

      2 a

----> 3 kk=a()

TypeError: 'list' object is not callable

上面举例1,aa定义了一个字符串,下面引用的时候被当做函数引用了。这种现象常常出现在前面已经定义了函数aa,而在下面的主程序过程中,aa又被赋值了字符串,再下面却又去引用前面的函数,所以报错。同理,举例2是因为函数定义后,后面又被付了浮点数据,再引用时当做函数使用,所以报错。      举例3,是因为赋值了列表,而又去作为函数引用,而报错

看下面的例子,涉及到了内置函数重新被赋值的问题,这个是大家经常犯的错误,尤其初学者。

前面有语句  list=[1,2,3,4,5,6,7,8],后面的使用如下:

a='welcome'

bb=list(a)

print(bb)

报错了:

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-44-922b6d2906fe> in <module>

      1 a='welcome'

----> 2 bb=list(a)

      3 print(bb)

TypeError: 'list' object is not callable

本来这段语句是可以执行的,但是报错了,就是因为list在前面被赋值了:list=[1,2,3,4,5,6,7,8],list是一个内置函数,可以用来定义列表等,而list作为python的内置函数是可以被重新赋值而改变了用法,不像关键字如“if、 then、 True”等不能赋值。

      Python中关键字有33个关键字,这33个是不能转换用法的,作为保留字使用。而68个内置函数(--版本3.6.2),都是可以改变被赋值,从而改变了用法,所以,对于内置函数,如果进行赋值或改变用法,一定要小心,否则后面按原来的方法使用就会报错,这个错误查找也是比较麻烦的,一般不建议改变内置函数的用法或者赋值,而当做关键保留字使用。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值