l'objet' int 'n'a pas d'attribut' getitem '

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()

Il montre une erreur d'exécution:

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

Je suis juste un débutant à python, et je suis incapable de corriger cela même après avoir cherché sur le net.

32
demandé sur Steve Mayne 2012-06-25 21:18:51

4 réponses

L'erreur:

'int' object has no attribute '__getitem__'

Signifie que vous essayez d'appliquer l'opérateur d'index [] sur un int, pas une liste. col n'est donc pas une liste, même quand elle devrait l'être? Commençons par cela.

Regardez ici:

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

Utilisez un nom de variable différent à l'intérieur, il semble que la compréhension de la liste écrase la variable col pendant l'itération. (Pas pendant l'itération lorsque vous définissez col, mais pendant les suivantes.)

49
répondu Kos 2012-06-25 17:24:37

Cette erreur pourrait être une indication que la variable avec le même nom a été utilisée dans votre code plus tôt, mais à d'autres fins. Peut - être, une variable a reçu un nom qui coïncide avec la fonction existante utilisée plus tard dans le code.

4
répondu mel 2018-03-27 19:34:32

Certains des problèmes:

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

Devrait être:

range(6)
2
répondu Geo 2012-06-25 17:24:10

Vous pouvez aussi secrète int à str première et affecter l'indice de lui, puis de nouveau le convertir en int comme ceci:

int(str(x)[n]) //where x is an integer value
0
répondu sameer saini 2018-08-25 15:37:24