python - TypeError:尝试获取可迭代列表时,“列表”对象不可调用
问题描述
在 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
到列表:
>>> 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
您还可以从模块中恢复函数引用,因此通过builtins.iter
.
推荐阅读
- python - 如何在 Flask 中流式传输大型视频
- react-native - 获取对服务器的请求时出现错误 403。服务器包含核心标头
- python - 如何返回 Chrome 中的所有元素?
- authentication - Heroku 在 Plotly Dash 网站上遵循 Basic Auth 示例时崩溃
- html - ASP.NET 页面中的活动导航栏
- flutter - 如何在 PaginatedDataTable Flutter Web 中实现搜索
- api - spring批处理API动态创建任务和步骤
- c# - Line Trace / Raycasting 如何在游戏引擎中工作以测试交叉点?
- javascript - 如何根据数据条件更改 React Native 样式颜色
- typescript - 此条件将始终返回 'false',因为类型 '"development" | “生产” | "test"' 和 '"local"' 没有重叠。ts(2367)