eval函数让我忧伤

别来无恙 提交于 2019-12-03 21:14:14

 今天首次接触这个eval函数,让我忧伤了一把。我把当成字符串拼接,结果错得天远地远。大体情况是下面这句代码,一个劲的给我报NameError: name 'qinfeng' is not defined.

  class_obj = eval('qinfeng.zheng.ipvsadm.%s()' % class_name)

当时,我就想,这尼玛一个字符串拼接,还需要定义的啥鬼。

后面百度了一把,发现自个有点瓜。

原来eval这一骚操作之后,class_obj就是一个对象实例,而当时就是没有引包。

 

下面模拟一下,便于以后复习,记心真是很给狗了。

 

1. 代码结构如下

 

 

 

2. ipvsadm.py

class Ipvs():
    def say(self):
        print("我很蛋疼。。。")

 

3. 测试类 test.py

import qinfeng.zheng.ipvsadm

if __name__ == '__main__':
    class_name = 'Ipvs'
    class_obj = eval('qinfeng.zheng.ipvsadm.%s()' % class_name)
    print(type(class_obj))
    class_obj.say()

 

当把import qinfeng.zheng.ipvsadm注释掉,运行test.py就会报以下错误

Traceback (most recent call last):
  File "E:/ws/python/20191106/qinfeng/zheng/test.py", line 5, in <module>
    class_obj = eval('qinfeng.zheng.ipvsadm.%s()' % class_name)
  File "<string>", line 1, in <module>
NameError: name 'qinfeng' is not defined

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!