下午看了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