首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >TypeError:在尝试获取可迭代列表时,无法调用list对象

TypeError:在尝试获取可迭代列表时,无法调用list对象
EN

Stack Overflow用户
提问于 2018-07-15 01:46:45
回答 1查看 1.2K关注 0票数 0

在python控制台中:

代码语言:javascript
复制
>>> 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()。例如:

代码语言:javascript
复制
>>> for letter in my_iter:
...     print(next(my_iter))
b
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
StopIteration

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-15 01:49:45

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

代码语言:javascript
复制
>>> 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()函数是一个内置函数,一旦删除隐藏的全局名称,就会再次找到它:

代码语言:javascript
复制
>>> 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.iterbuiltins module恢复函数引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51341929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档