TypeError: 'tuple' object does not support item assignment

Merhaba arkadaslar aldığım bu hatanın sebei nedir?

def calculate(self):
    tabloku = "SELECT * FROM KR_BM_1700"
    self.im.execute(tabloku)
    data = self.im.fetchall()
    for i in data:
        print "Hesaplanan parcalar !!!"
        print i[0]
        if i[11] == 1:
            i[11] = 5
        if i[11] == 2:
            i[11] = 4
        if i[11] == 3:
            i[11] = 3
        if i[11] == 4:
            i[11] = 2.5
        if i[11] == 5:
            i[11] = 2
        if i[11] == 6:
            i[11] = 1.5
        if i[11] == 7:
            i[11] = 1.5
        if i[11] == 8:
            i[11] = 2.5
        calc=(i[5]*i[7])+(480*i[11])+i[6]
        print calc
    #self.vt.close()
Traceback (most recent call last):
  File "main.py", line 13, in <module>
    startMain.calculate()
  File "C:\Users\Mustafa\PycharmProjects\planning2\db.py", line 45, in calculate
    i[11] = 5
TypeError: 'tuple' object does not support item assignment

Merhaba.

Python’da iki tip dizi vardır: Listeler(list) ve demetler(tuple). Listeler değiştirilebilirken demetler değiştirilemezler. Bu hatayı bir demeti değiştirmeye çalıştığınız için alıyorsunuz. Kodunuzda demeti harici olarak listeye çevirirseniz sorun çözülür:

def calculate(self):
    tabloku = "SELECT * FROM KR_BM_1700"
    self.im.execute(tabloku)
    data = self.im.fetchall()
    for i in data:
        i = list(i) # Burada demeti listeye çeviriyoruz...
        print "Hesaplanan parcalar !!!"
        print i[0]
        if i[11] == 1:
            i[11] = 5
        if i[11] == 2:
            i[11] = 4
        if i[11] == 3:
            i[11] = 3
        if i[11] == 4:
            i[11] = 2.5
        if i[11] == 5:
            i[11] = 2
        if i[11] == 6:
            i[11] = 1.5
        if i[11] == 7:
            i[11] = 1.5
        if i[11] == 8:
            i[11] = 2.5
        calc=(i[5]*i[7])+(480*i[11])+i[6]
        print calc
    #self.vt.close()

İyi çalışmalar.

1 Beğeni

Teşekkürler o zaman şöyle bir sonuca varabilirmiyiz? Veri tabanı sql demet tipi veri döndürüyor.

Evet, böyledir diyebiliriz.