zoukankan      html  css  js  c++  java
  • 迭代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

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

  • 相关阅读:
    学员操作——隔行变色
    jQuery基础及选择器(1)
    学员操作——组合继承
    JavaScript面向对象
    学员操作——创建继承person的student子类
    学员操作——flower函数
    JavaScript操作DOM(2)
    JavaScript操作DOM(1)
    学员操作——制作秒表定时器
    学员操作——制作5s关闭广告
  • 原文地址:https://www.cnblogs.com/zuoshoushizi/p/7576735.html
Copyright © 2011-2022 走看看