2017-08-26 123 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 –