2012-10-03 16 views
9

मेरे कार्यक्रम लग रहा हैपायथन: AttributeError: 'NoneType' ऑब्जेक्ट कोई गुण नहीं है 'संलग्न'

तरह
# 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

+0

संभव डुप्लिकेट [अजगर TkInter - AttributeError: 'NoneType' ऑब्जेक्ट कोई विशेषता 'प्राप्त' है] (http://stackoverflow.com/questions/1101750/python-tkinter-attributeerror-nonetype-object-has- नो-एट्रिब्यूट-प्राप्त) – UpAndAdam

उत्तर

25

वास्तव में आप 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] 
+0

यह पकड़ था, इसे चुनने के लिए धन्यवाद! – daydreamer

+0

@DSM ने अभी चेक किया है, 'प्राप्त करें') के कारण 'कोई नहीं 'नहीं आ रहा है,' i' dict में मौजूद है लेकिन इसका मान 'none' है। –

+0

@ अश्विनी चौधरी: आप सही हैं - किसी भी तरह से मुझे याद आया कि यह * कई बार लूप होगा। – DSM

2
[...] 
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 लूप, हालांकि,

012 को सरलीकृत किया जा सकता है
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 
की
संबंधित मुद्दे