下午看了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
這里還有一個變量在緩存中存儲的問題,留給大家自己研究去吧