迭代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

這里還有一個變量在緩存中存儲的問題,留給大家自己研究去吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM