Python错误:类中的全局变量未定义

2024-09-28 22:41:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类,其中两个变量设置为某个默认值。我定义了一个函数,在这个函数中我将这些变量声明为全局变量。我得到一个错误,它说变量没有定义。一个变量是counter,它将在每次函数调用上递增,而另一个变量必须在每次调用上附加消息。在附加多条消息并且计数器值达到某个阈值后,我想将所有这些消息插入到MySQL数据库中。 但变量不是附加值。它显示变量未定义。在

class Message():
     insertStatement= ''
     insertCounter = 0

    def Save(self, msg)
        global insertCounter
        global insertStatement 

        if  msg.topic.startswith("topic1/"):
            insertStatement += "INSERT INTO mydatabase.table VALUES (" + msg.payload.decode("utf-8") + "," + datetime + ");"
       elif msg.topic.startswith("topic2/"):
            insertStatement += "INSERT INTO mydatabase.table1 VALUES (" + msg.payload.decode("utf-8") + "," + datetime + ");"
       elif msg.topic.startswith("topic3/")   
            insertStatement += "INSERT INTO mydatabase.table2 VALUES (" +msg.payload.decode("utf-8") + "," + datetime + ");"
       elif msg.topic.startswith("messages"):
            insertStatement += "INSERT INTO mydatabase.table3 VALUES ('" + msg.topic + "',"  + msg.payload.decode("utf-8") + "," + datetime + ");"
       else:
            return  
       insertcounter +=1
       if(insertCounter > 1000):
         for result in cursor.execute(insertStatement, multi=True):
             print result.row_count  # i changed it to result

Tags: 消息datetimetopicmymsgdatabaseutfpayload
3条回答

你的代码中有几个错误,请更新并检查。在

  1. 您已经声明了一个全局变量insertCounter和递增变量{}。将其更新为self.insertCounter+1
  2. 更新结果变量,假设它是result,而不是{}

您可能只需要实例变量:

class Message():
    def __init__(self):
        self.insertStatement= ''
        self.insertCounter = 0

    def Save(self, msg)
        if msg.topic.startswith("topic1/"):
            self.insertStatement += "INSERT INTO mydatabase.table VALUES (" + msg.payload.decode("utf-8") + "," + datetime + ");"
        elif msg.topic.startswith("topic2/"):
            self.insertStatement += "INSERT INTO mydatabase.table1 VALUES (" + msg.payload.decode("utf-8") + "," + datetime + ");"
        elif msg.topic.startswith("topic3/")   
            self.insertStatement += "INSERT INTO mydatabase.table2 VALUES (" +msg.payload.decode("utf-8") + "," + datetime + ");"
        elif msg.topic.startswith("messages"):
            self.insertStatement += "INSERT INTO mydatabase.table3 VALUES ('" + msg.topic + "',"  + msg.payload.decode("utf-8") + "," + datetime + ");"
        else:
            return  
        self.insertcounter += 1
        if self.insertCounter > 1000:
            # do the SQL thing

作为一个程序员,你应该非常,非常,非常努力不使用全局变量。在

请检查最后一行。它应该是result,而不是reslut。在

相关问题 更多 >