【问题标题】:TypeError: 'list' object is not callable when trying to get a list iterable [closed]TypeError:'list'对象在尝试获取可迭代列表时不可调用[关闭]
【发布时间】:2018-07-14 17:46:45
【问题描述】:

在 python 控制台中:

>>> del list # Just to make sure kw: list is not assigned to any variable
>>> my_list = ["a", "b", "c"]
>>> my_iter = iter(my_list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>>> type(my_list)
<class 'list'>
>>> type(list)
<class 'type'>

我在这里缺少什么?我想要一个可迭代的对象,以便在循环时可以访问next()。例如:

>>> for letter in my_iter:
...     print(next(my_iter))
b
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
StopIteration

我知道这会在最后一个字母上引发错误,但这无关紧要。

【问题讨论】:

  • 您已将列表对象分配给名称iter。所以iter(...) 会引发这个异常,不管你传入什么。
  • 在新控制台中重新开始时是否会出现同样的错误?

标签: python python-3.x list iterator


【解决方案1】:

您已将名称 iter 绑定到一个列表:

>>> my_list = ["a", "b", "c"]
>>> iter(my_list)
<list_iterator object at 0x10b1e04e0>
>>> iter = [42]  # rebinding the name iter to a list object
>>> iter(my_list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>>> type(iter)
<class 'list'>
>>> callable(iter)
False

异常并没有告诉您传递给调用的列表对象是问题所在。您不是在调用my_list 对象,而是在调用iter

使用del iter删除当前命名空间中的全局名称; iter() 函数是一个内置函数,一旦你删除了阴影全局,它就会再次出现:

>>> del iter
>>> iter(my_list)
<list_iterator object at 0x10b1e0358>
>>> type(iter)
<class 'builtin_function_or_method'>
>>> callable(iter)
True
>>> my_iter = iter(my_list)
>>> for letter in my_iter:
...     print(next(my_iter))
...
b
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
StopIteration

最后一个回溯可以通过要求next()返回一个默认值来修复,例如next(my_iter, 'no more letters').

您还可以从builtins module 恢复函数引用,因此通过builtins.iter

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2021-04-25
    • 2021-03-31
    • 2017-02-20
    相关资源
    最近更新 更多