【发布时间】:2019-08-17 12:20:23
【问题描述】:
在cso.data.__init__.py 我正在尝试执行以下操作:
from cso.data._features import * # import sumbodule
for k, v in globals().items():
if isinstance(v, entity):# entity is some type
print(k,v)
令我惊讶的是,我得到:
Traceback (most recent call last):
File "X:\Programming\workspaceEclipse\PyCommonSence\src\cso\data\__init__.py", line 20, in <module>
from cso.data._features import *
File "X:\Programming\workspaceEclipse\PyCommonSence\src\cso\data\__init__.py", line 49, in <module>
for k, v in globals().items():
RuntimeError: dictionary changed size during iteration
出于某种原因,它试图以某种方式修改迭代的全局变量。怎么会这样 ?
还有另一种更好的方法来列出包中所有模块中所有变量的name: value 形式吗?
列表理解等效项可以正常工作,但会打印两次:
print([ (k, v) for k, v in globals().items() if isinstance(v, entity)])
这里发生了什么?
【问题讨论】:
-
试试
for k, v in list(globals().items()):。 -
我不想创建新列表,因为我预计会有很多项目
-
“手数”是多少?无论如何,请参阅我的编辑以了解两种选择
标签: python python-import