今天首次接觸這個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