为什么系统显示:NameError:未定义名称'self'

时间:2019-08-02 21:56:28

标签: python

我的代码是这样的:

class NN(object):


    def __init__(self,config=None,opts=None):
        self.file_vars   = ['self.corpusfile','self.dbfile']
        self.corpusfile="data.json"
        self.dbfile="db.json"

    def saveNet(self):
        for name in self.file_vars:
            print(name)
            print(eval(name))
        b=dict( [(name,eval(name)) for name in self.file_vars])



a=NN()
a.saveNet()

结果是:

self.corpusfile
data.json
self.dbfile
db.json

错误消息是:

  

NameError:名称'self'未定义

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

列表理解具有其自身的局部变量范围。 eval无法看到self,因为self来自外部作用域,并且没有任何触发eval看到变量的闭包变量机制。 (self中的self.file_vars引用不会触发它,因为尽管该表达式是列表推导的一部分,但该表达式是在列表推导的范围之外求值的。)

使用eval停止。这很危险,几乎总是一个坏主意,而对于这样的事情完全没有必要。适当的替换工具可能包括getattrself.__dict__或其他内容,具体取决于您的完整用例。