Python不解释True - ' NoneType'对象不支持项目分配

时间:2017-02-10 19:17:40

标签: python web2py

我正在使用Web2Py。我试图启用一个似乎没有在任何地方定义的文本框,但不知何故出现在网页上。

反正。

如果登录的用户属于某个组,则会启用该文本​​框,并且用户可以在文本框中书写。如果他们不是该组的成员,则文本框被禁用 - 他们可以读取之前已写入但无法输入。

似乎影响启用状态的代码是

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 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 定义为

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语句的一部分调用时:

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

每次用户属于A,B或C组之一时,都会出现以下错误:

' NoneType'对象不支持项目分配

任何提示? SIDE NOTE 我也强迫该功能立即返回False,并且我没有收到任何错误。如果我强迫真;我收到错误。简单地通过使方法的第一行返回True

来完成强制 问:我如何让python解释我的函数被调用以接受值True?我在俯瞰什么?

更新 完全追溯是 enter image description here

1 个答案:

答案 0 :(得分: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

如果您需要进一步的帮助疑难解答,请修改您的问题以包含您设置的位置,然后我将编辑我的答案。