2017-02-10 100 views
0

我正在使用Web2Py。我試圖啓用一個似乎沒有被定義在任何地方,但以某種方式出現在網頁上的文本框。Python沒有解釋爲True - 'NoneType'對象不支持項目分配

反正。

如果用戶登錄屬於某個組,則文本框已啓用,用戶可以在文本框中進行書寫。如果他們不是該組的成員,則該文本框將被禁用 - 他們可以讀取之前編寫的內容,但無法輸入。

似乎影響使能狀態的代碼是這個

if __userCanPerformStep(step) and not flow_completed: 
    flow_step_forms[step.name].element('textarea')['_rows'] = 5 

__userCanPerformStep作爲

def __userCanPerformStep(step_row): 
    if auth.user.id in step_row.target_users: 
     return True 

    for group_id in step_row.target_groups: 
     if db((db.auth_membership.user_id == auth.user.id) & (db.auth_membership.group_id == group_id)).count() > 0: 
      return True 

    if auth.has_group_membership("systemadmin"): 
     return True 
    return False 

has_group_membership被定義爲

def has_group_membership(self, groupname): 
     if self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).count() > 0: 
      group_id = self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).select().first().id 
      return self.has_membership(group_id) 

     return False 
(步驟)
被定義

由於__userCanPerformStep在很多地方使用,我創建了一個新的方法,如:定義爲

def has_group_membership_or(self, groupnames): 
     if self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role.belongs(groupnames))).count() > 0: 
      for groupname in groupnames: 
       group = self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).select().first() 
       if group and self.has_membership(group.id): 
        return True 

     return False 

當我現在調用該函數爲IF的一部分

def canAddComment(step_row): 
    if auth.has_group_membership_or(["groupA", "groupB", "groupC"]): 
      return False 
    if auth.user.id in step_row.target_users: 
      return False 
    return False 

has_group_membership_or像這樣的陳述:

if ((canAddComment(step)) and (not flow_completed)): 
       flow_step_forms[step.name].element('textarea')['_rows'] = 5 

並且每當用戶屬於到基團A,B或C.我得到以下錯誤之一:

「NoneType」對象不支持項目分配

任何提示?? 邊注 我也強制該函數立即返回False,我沒有得到任何錯誤。如果我強制True;我收到錯誤。強制只需通過使方法的第一行爲return True

問:如何讓python解釋我的函數被調用來接受值True?我忽略了什麼?

UPDATE 完整回溯是 enter image description here

+2

發佈完整的堆棧跟蹤。它會告訴你什麼對象是'None',它在哪裏是'None'。 – TemporalWolf

回答

1
None['_rows'] = 5 

拋出

TypeError: 'NoneType' object does not support item assignment 

所以flow_step_forms[step.name].element('textarea')返回None,大概是因爲flow_step_forms[step.name]沒有元素'textarea'或元素被設置爲None

如果您需要進一步的幫助疑難解答,請編輯您的問題以包括您設置的位置,然後我編輯我的答案。

相關問題