迭代var()内置函数的时候出现RuntimeError: dictionary changed size during iteration的解决办法详解大数据

下午看了Mr Seven的教学视频,其中有一段讲全局变量的视频,迭代输出全局变量的时候报错了。

视频中的做法:

for k,v in vars().items(): 
    print(k)

打印结果

    for k,v in vars().items(): 
RuntimeError: dictionary changed size during iteration

为什么会报错呢?

其实是因为在进行for循环的时候产生了两个新的全局变量k和v,也就是说循环开始后vars()中增加了两个新的键值对,for循环的next方法无法完成对两个新键值对的迭代,这时候就会报错。

有什么解决办法呢?

其实可以在for循环开始前先声明两个变量k = None,v =None,然后进行一次判断在输出

k =None 
v =None 
for k,v in vars().items(): 
    if v !='__cached__': 
        print(k,' :  ',v)

这样结果就正常了:

__name__  :   __main__ 
__doc__  :   None 
__package__  :   None 
__loader__  :   <_frozen_importlib_external.SourceFileLoader object at 0x0000019939CCD198> 
__spec__  :   None 
__annotations__  :   {} 
__builtins__  :   <module 'builtins' (built-in)> 
__file__  :   E:/oldboy/myProject/20170922.py 
__cached__  :   None

这里还有一个变量在缓存中存储的问题,留给大家自己研究去吧

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/9256.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论