Python:AttributeError:“NoneType”对象没有属性“append”

2024-04-19 21:03:27 发布

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

我的程序看起来像

# global
item_to_bucket_list_map = {}

def fill_item_bucket_map(items, buckets):
    global item_to_bucket_list_map

    for i in range(1, items + 1):
        j = 1
        while i * j <= buckets:
            if j == 1:
                item_to_bucket_list_map[i] = [j]
            else:
                item_to_bucket_list_map[i] = (item_to_bucket_list_map.get(i)).append(j)
            j += 1
        print "Item=%s, bucket=%s" % (i, item_to_bucket_list_map.get(i))


if __name__ == "__main__":
    buckets = 100
    items = 100
    fill_item_bucket_map(items, buckets)

当我做这个的时候,它把我扔了

AttributeError: 'NoneType' object has no attribute 'append'

不知道为什么会这样?当我已经在每个j的开头创建了一个列表时


Tags: to程序mapforgetifbucketdef
2条回答

实际上,您将None存储在这里: append()更改列表并返回None

 item_to_bucket_list_map[i] = (item_to_bucket_list_map.get(i)).append(j)

示例:

In [42]: lis = [1,2,3]

In [43]: print lis.append(4)
None

In [44]: lis
Out[44]: [1, 2, 3, 4]
[...]
for i in range(1, items + 1):
    j = 1
    while i * j <= buckets:
        if j == 1:
            mylist = []
        else:
            mylist = item_to_bucket_list_map.get(i)
        mylist.append(j)
        item_to_bucket_list_map[i] = mylist
        j += 1
    print "Item=%s, bucket=%s" % (i, item_to_bucket_list_map.get(i))

然而,while循环可以简化为

    for j in range(1, buckets / i + 1): # + 1 due to the <=
        if j == 1:
            mylist = []
        else:
            mylist = item_to_bucket_list_map.get(i)
        mylist.append(j)
        item_to_bucket_list_map[i] = mylist

相关问题 更多 >