eval函數讓我憂傷

 今天首次接觸這個eval函數,讓我憂傷了一把。我把當成字符串拼接,結果錯得天遠地遠。大致狀況是下面這句代碼,一個勁的給我報NameError: name 'qinfeng' is not defined.python

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

當時,我就想,這尼瑪一個字符串拼接,還須要定義的啥鬼。函數

後面百度了一把,發現自個有點瓜。測試

原來eval這一騷操做以後,class_obj就是一個對象實例,而當時就是沒有引包。spa

 

下面模擬一下,便於之後複習,記心真是很給狗了。code

 

1. 代碼結構以下對象

 

 

 

2. ipvsadm.pyblog

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

 

3. 測試類 test.pyip

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
相關文章
相關標籤/搜索