我无法弄清楚这是怎么回事,这是一个类中的相关代码:
def flip_states(self, newValue):
...
self.currentState = newValue
self.currenStateStr = genConfig.SENSOR_STATE_TO_STR[newValue]
self.update_field_in_db("currentState", self.currentState)
self.update_field_in_db("currentStateStr", self.currenStateStr)
wx.CallAfter(dispatcher.send, eventConfig.ELEMENT_STATE_LISTENER,
orders=[self.genType, self.currentStateStr, self.name, self.id])
很简单,但update_field_in_db调用获取新重新分配的self.currentStateStr版本,但wx.CallAfter调用获取self.currentStateStr的旧值
当我输入从db调用接收到的currentStateStr值的打印时,它是正确的并且db按预期更新 - 然后我在db调用之后但在wx.CallAfter之前立即在此函数中打印回到原来的状态。
我想也许这与Python分配列表的方式有关,但我可以打印没有列表的属性,它们仍然是旧的。我已经搜索了db调用,以确保没有其他任何事情发生改变它们。谁能看到我哪里出错?
编辑1:
update_field_in_db是这样的:
def update_field_in_db(self, updateCol, updateTarget):
self.database.update_element(updateCol=updateCol, updateTarget=updateTarget, **self.dbArgs)
然后database.update_element是:
def update_element(self, elementType, updateCol, updateTarget, whereCol, whereTarget, updateAll=False):
self.open_cursor()
if not updateAll:
addQuotes1 = "'" if type(updateTarget).__name__ == "str" else ""
addQuotes2 = "'" if type(whereTarget).__name__ == "str" else ""
query = "UPDATE " + genConfig.DB_TABLES[elementType] + " SET {0} = {add1}{1}{add1} WHERE {2} = {add2}{3}{add2}"
self.execute_query(query.format(updateCol, updateTarget, whereCol, whereTarget, add1=addQuotes1, add2=addQuotes2))
else:
pass # Not Implemented Yet
self.close_cursor()
答案 0 :(得分:0)
currentStateStr在赋值和DB调用中没有t拼写,它与wx.CallAfter调用中的t拼写。
只是一个拼写错误,但很难看到 - Eclipse强调所有同名的变量最终揭示了它。