2017-08-26 124 views
0

我有一个messenger bot,以顺序的方式提问。为了跟踪我使用的计数器是会话变量的问题,但是当我增加会话[计数器]时,它不会改变。会话变量在增量时不会改变

这是逻辑。即使这段代码有效,但我不确定为什么当我为我的机器人实现相同的逻辑时,它不起作用。

question_dict = { 
     'Locq0':[{'question':"Some question 0",'options':(["Continue","@continue"])}], 
     'Locq1':[{'question':"Some question 1",'options':(["Continue","@continue"])}], 
     'Locq2':[{'question':"Some question 2",'options':(["Continue","@continue"])}], 
} 

def main(): 
    session['counter'] = 0 
    if user_payload == "@continue": 
     increment() 

def increment(): 
    if session['counter'] <= len(question_dict): 
     session['counter'] += 1 
     quiz(session['counter']) 

def quiz(counter): 
    question = question_dict['Locq{}'.format(counter)][0]['question'] 
    option = question_dict['Locq{}'.format(counter)][0]['options'] 
    # display the question and option 
    print(question) 
    print(option) 

返回机器人。当用户第一次使用机器人时,将创建一个会话变量session['counter']并将其初始化为0.然后,机器人开始提问,转到下一个问题,它应该增加session['counter'] +=1。但是这并没有发生,即使调用了increment()函数,session['counter']始终为0。

我做错了什么?或者有没有适当的方法来做到这一点?这个应用程序使用Flask。

回答

0

我认为这是因为当调用main方法时,会抛出一个错误。尝试初始化字典,然后增加它。
下面的代码抛出错误

def main(): 
    session['counter'] = 0 
    if user_payload == "@continue": 
     increment() 

试试下面的代码

def main(): 
     session = {'counter':0} 
     if user_payload == "@continue": 
      increment() 
+0

谢谢!但是,这不是问题。当我在具有表单的Web应用程序中使用相同的逻辑时,它工作正常。 @Kalyan Reddy –

+0

然后,可能你正在代码中的某处再次将会话计数器更新为0。尝试将会话字典更改为全局字典并让我知道 –

+0

会话是一个烧录字典,计数器是会话变量。我开始使用会话,因为多处理器服务器无法跟踪全局数据。你可以按照这个问题在这里https://stackoverflow.com/questions/45795977/python3-incrementing-a-global-variable-causes-bot-to-randomize-responses-when @Kalyan Reddy –