【问题标题】:NameError: name is not definedNameError:名称未定义
【发布时间】:2018-01-24 23:59:42
【问题描述】:

更新的代码片段: 我已经更新到“自我”。约定而不是全局,但仍然有唯一的值返回在类级别分配的空字符串,但是如果将其删除,则会引发错误。

class MainDialog(QWidget, qcDbWidget4.Ui_qcQueryWidget):

    dbDir = ''
    DbSelection = ''
    dbPath = ''
    TabSelection = ''
    exportDir = ''
    exportFileName = ''  

    def __init__(self, parent=None):
        super(MainDialog, self).__init__(parent)
        self.setupUi(self)
        self.connect(self.dbDirSelect, SIGNAL("clicked()"), self.getDirFileNames)
        self.connect(self.dbSelectButton, SIGNAL('clicked()'), self.selectDb)
        self.connect(self.tabSelectButton, SIGNAL('clicked()'), self.selectTab)
        self.connect(self.exportDirSelect, SIGNAL("clicked()"), self.getExportDir)
        self.connect(self.exportButton, SIGNAL("clicked()"), self.setExportName)
        self.connect(self.querySubmitButton, SIGNAL("clicked()"), self.setQueryParams)
        self.connect(self.querySubmitButton, SIGNAL("clicked()"), self.dbQuery)

    def getDirFileNames(self):
        self.dbDir = str(QFileDialog.getExistingDirectory(self))
        self.dbDirDisplay.setText(self.dbDir)

        dbFileList = []
        for root, dirs, files in os.walk(self.dbDir):
            for file in files:
                if file.endswith('.db'):
                    dbFileList.append(file)

        self.dbSelection.addItems(dbFileList)

【问题讨论】:

  • 哪一行返回错误?你还看过哪些其他答案?
  • 不要使用global。您可能正在寻找self.qcLevelCode
  • 它似乎来自:queryStatement = "SELECT * FROM " + qcTabSelect + " WHERE " + qcLevelSelect 朝向底部
  • 我已经尝试了 self.qcLevelCode,但它返回了我设置为占位符的空字符串,而不是 qcLevelDbQuery 方法中的全局重新分配。 NameError: 名称 'qcLevelCode' 未定义
  • 这是因为您需要将所有引用从global x 更改为self.x,包括qcLevelDbQuery。您的代码不包含全局变量。

标签: python variables global nameerror


【解决方案1】:

当你在类级别定义变量时

class A(object):
    c = ''

您可以将“c”用作静态类变量或实例变量(或两者兼而有之,但这会令人困惑)。如果要将其用作静态类变量,则需要将其用作A.c(整个类的静态变量,可在实例方法之外访问)。如果要将其用作实例变量,则需要使用self.c(每个实例都有自己的变量)。 c 在这种情况下不会被定义为变量,如果你尝试使用global c,你应该有 NameError。

【讨论】:

  • 我一直抛出一个错误,如果变量最初没有在类级别定义,然后设置为全局以进行重新分配,则该变量未定义。如何将变量定义为实例,分配一个值,然后在同一个类中的另一个方法中引用?
  • self.qcLevelCode 将等于定义的值(在您的情况下为''),除非您在某处为其分配了一些东西。它可以在__init__ - 构造函数中完成。在任何带有self.qcLevelCode = "LCU" 之类的语句的方法中,或者如果您将实例分配给inst inst.qcLevelCode = "LCU" 之类的某个变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2019-01-26
  • 2021-10-05
  • 2017-08-16
  • 2019-08-18
  • 2015-05-13
相关资源
最近更新 更多