TypeError:'builtin_function_or_method'对象不可订阅

时间:2011-11-30 07:34:04

标签: python tkinter typeerror

elif( listb[0] == "-test"):
    run_all.set("testview")
    listb.pop[0]
  

错误:Tkinter回调追踪中的异常(最近一次调用   最后):文件   “/tools/python/2.7.2/lib/python2.7/lib-tk/Tkinter.py”,第1410行,   在通话       return self.func(* args)文件“./edit.py”,第581行,在populate中       listb.pop [0] TypeError:'builtin_function_or_method'对象不可订阅

第581行由上面代码中的最后一个pop语句表示。 run_all是一个StringVar。

为什么我会收到此错误以及如何解决?

8 个答案:

答案 0 :(得分:23)

我想你想要

listb.pop()[0]

表达式listb.pop是一个有效的python表达式,它导致对pop方法的引用,但实际上并不调用该方法。您需要添加打开和关闭的括号来调用方法。

答案 1 :(得分:6)

您尝试访问pop似乎是列表或元组,但pop不是。这是一种方法。

答案 2 :(得分:4)

而不是写listb.pop[0]

listb.pop()[0]
         ^
         |

答案 3 :(得分:3)

不敢相信这个线程持续了这么长时间。 如果您分心,则会收到此错误 并至少在我的情况下使用[]代替()。

Pop是列表数据类型的一种方法, https://docs.python.org/2/tutorial/datastructures.html#more-on-lists

因此,您不应该像使用列表本身一样使用pop,即pop [0]。 该方法需要一个表示索引的可选参数, 因此, Tushar Palawat 在未获批准的答案之一中指出, 可以解决上述示例的正确调整是:

listb.pop(0)

如果您不相信,请运行以下示例:

if __name__ == '__main__':
  listb = ["-test"]
  if( listb[0] == "-test"):
    print(listb.pop(0))

其他调整也可以使用,但是感觉它们正在滥用Python语言。该线程需要修复,而不是使用户困惑。

加法, a.pop()删除并返回列表中的最后一项。 结果,a.pop()[0]将获得该字符的第一个字符 最后一个元素。似乎这不是给定的代码片段 旨在实现。

答案 4 :(得分:2)

看起来像是您误输入括号而不是括号。

答案 5 :(得分:1)

如果不对pop操作使用括号,则会出现此错误。以这种方式编写代码。

listb.pop(0)

这是一个有效的python表达式。

答案 6 :(得分:0)

仅供参考,这不是该帖子的答案。但这可能会帮助可能会收到以下错误消息的未来用户:

  

TypeError:“ builtin_function_or_method”对象不可下标

就我而言,它是由于缩进不良引起的。

只需缩进一行代码即可解决问题。

答案 7 :(得分:0)

存在类似的错误,易于修复:

    TypeError Traceback (most recent call last) <ipython-input-2-1eb12bfdc7db> in <module>
  3 mylist = [10,20,30] ----> 4 arr = np.array[(10,20,30)] 5 d = {'a':10, 'b':20, 'c':30} TypeError: 'builtin_function_or_method' object is not subscriptable

但我应该将其写为:

arr = np.array([10,20,30])

非常容易解决,菜鸟/傻瓜错误。