'int' object has no attribute '__getitem__'

匿名 (未验证) 提交于 2019-12-03 02:11:02

问题:

import math import os   class collection:     col = [[0 for col in range(5)] for row in range(6)]     dist = [[0 for col in range(6)] for row in range(6)]     filename = ""     result = ""      def __init__(self,arg1):         self.filename = arg1      def coll(self):          for i in range(6):             try:                 if(i==0):                     f = open(self.filename,'r')                 elif(i==1):                     f = open("chap1.txt",'r')                 elif(i==2):                     f = open("chap2.txt",'r')                 elif(i==3):                     f = open("chap3.txt",'r')                 elif(i==4):                     f = open("chap4.txt",'r')                 elif(i==5):                     f = open("chap5.txt",'r')                  for j in range(5):                     self.result = f.readline()                     self.col[i][j] = self.result             finally:                 print "file handling error"      def distance(self):         for i in range[6]:             for j in range[6]:                 dis = 0                 for k in range[5]:                     dis += math.fabs((self.col[i][k]-self.col[j][k])*(j-i))                 self.dist[i][j] = dis                 self.dist[i][i] = sys.maxdouble         return self.dist  class profile:     dist = [[0 for col in range(6)]for row in range(6)]     filename = ""     pque = [[0 for col in range(6)]for row in range(6)]     d = [[0 for col in range(6)]for row in range(6)]     par = [[0 for col in range(6)]for row in range(6)]     st = 0      def __init__(self,arg1):         self.filename = arg1      def begin(self):         ob = collection(self.filename)         ob.coll()         dist = ob.distance()      def sssp(self):         for i in range(6):             pque[i] = sys.maxdouble             d[i] = sys.maxdouble         d[0] = 0         pque[0] = 0          while isempty()==0:             u = extract_min()             for i in range(6):                 if d[i]>d[u]+dist[u][i]:                    d[i] = d[u]+dist[u][i]                    pque_deckey(i,d[i])                    par[i]=u                 if u!=0:                     print u             print "\n"             for i in range(6):                 print par[i]      def extract_min():         ret = 0         shift = 0         minimum = pque[0]          for i in range(6):             if pque[i]<minimum:                 minimum = pque[i]                 ret = i         pque[ret] = sys.maxdouble         return ret      def isempty(self):         count = 0         for i in range(6):             if pque[i] == sys.maxdouble:                 count=count+1         if count==6:             return 1         else :             return 0      def pque_deckey(self,im,di):         pque[im]=di  class main:     filename = raw_input("enter name of student:\n")     filename = filename + ".txt"     if(os.path.exists(filename)==1):         f = file(filename,"r")     else:         f = file(filename,"w+")         att1 = raw_input("att1 score:\n")         att2 = raw_input("att2 score:\n")         att3 = raw_input("att3 score:\n")         att4 = raw_input("att4 score:\n")         att5 = raw_input("att5 score:\n")         f.write(att1)         f.write("\n")         f.write(att2)         f.write("\n")         f.write(att3)         f.write("\n")         f.write(att4)         f.write("\n")         f.write(att5)         f.write("\n")     stud = profile(filename)     stud.begin()     stud.sssp() 

it shows a runtime error :

File "C:\Python27\winculum.py", line 33, in coll     self.col[i][j] = self.result TypeError: 'int' object has no attribute '__getitem__' 

I am just a beginner at python, and I am unable to rectify this even after searching on the net.

回答1:

The error:

'int' object has no attribute '__getitem__' 

means that you're attempting to apply the index operator [] on an int, not a list. So is col not a list, even when it should be? Let's start from that.

Look here:

col = [[0 for col in range(5)] for row in range(6)] 

Use a different variable name inside, looks like the list comprehension overwrites the col variable during iteration. (Not during the iteration when you set col, but during the following ones.)



回答2:

This error could be an indication that variable with the same name has been used in your code earlier, but for other purposes. Possibly, a variable has been given a name that coincides with the existing function used later in the code.



回答3:

Some of the problems:

for i in range[6]:             for j in range[6]: 

should be:

range(6) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!