TypeError: 'tuple' ... trotz <type 'list'>

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
vogelhaus
User
Beiträge: 3
Registriert: Donnerstag 9. August 2018, 17:35

Ich habe das Problem, daß trotz des Datentyps 'list' die Fehlermeldung "TypeError: 'tuple' object does not support item assignment" kommt.
Der Codeauszug dazu:

Code: Alles auswählen

def in_db_eintragen(card):	
	print "in_db_eintragen(card)"
	print type(wuerfeln)
	print wuerfeln[numzaehler][2]
	print card
	wuerfeln[numzaehler][2] = card
Und die Ausgabe am Terminal:
in_db_eintragen(card)
<type 'list'>
0
3
Traceback (most recent call last):
File "./rfid.py", line 85, in <module>
in_db_eintragen(schein)
File "./rfid.py", line 63, in in_db_eintragen
wuerfeln[numzaehler][2] = card
TypeError: 'tuple' object does not support item assignment


Kann mir bitte jemand dazu eine Erklärung geben? Danke!
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`wuerfeln` mag eine Liste sein, aber was ist `wuerfeln[numzaehler]`? Ich vermute mal ganz stark ein Tupel.

Englisch und Deutsch mischen ist keine gute Idee. `wuerfeln` ist kein guter Name für etwas das keine Funktion oder Methode ist, denn das beschreibt ja eine Tätigkeit und kein ”Ding”. Wo kommt `numzaehler` her? Falls das eine Konstante ist, sollte es komplett gross geschrieben werden. Falls es keine Konstante ist, sollte das nicht einfach so ”magisch” aus der Umgebung kommen, sondern als Argument übergeben werden. Was soll das `num` in dem Namen bedeuten? Und was hat die ”magische” Zahl 2 für eine Bedeutung? Das sollte vielleicht als Konstante definiert werden, oder Tupel sind nicht wirklich gute Elemente für die `wuerfeln`-Liste.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
vogelhaus
User
Beiträge: 3
Registriert: Donnerstag 9. August 2018, 17:35

Vielen Dank für die schnelle Antwort!
Tatsächlich ist `wuerfeln[numzaehler]` ein Tupel, wie ich jetzt überprüft habe. Ich hab im Programm zuvor die Variable 'wuerfeln' mit list(wuerfeln) in eine Liste umgewandelt. Daß damit darin enthaltene Tupel nicht umgewandelt werden, war mir nicht bekannt. Muß ich jetzt die Liste durcharbeiten und jedes einzelne Tupel wiederum in eine Liste verwandeln?

Mein Programmierstil ist etwas hanebüchen und mit dem Englischen tu ich mich auch schwer. Ich bitte das mir nachzusehen!
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Kannst Du näher erklären was Du machen willst?

Warum ist `wuerfeln` etwas anderes als eine Liste, das erst in eine Liste umgewandelt wird? Woher kommt `wuerfeln`?
vogelhaus
User
Beiträge: 3
Registriert: Donnerstag 9. August 2018, 17:35

wuerfeln kommt aus einer mysql-Abfrage. Die Datenbank hat 35 Zeilen und 3 Spalten. Das Ergebnis dieser Abfrage kommt dann als Tupel daher. Wenn ich diesen Tupel umwandle mit list(wuerfeln) ist zwar wuerfeln eine Liste, die Spalten bleiben aber ein Tupel. Ich bin nun soweit, daß ich in einer Schleife diese auch noch in eine Liste umwandle. Ich habe noch nichts gefunden, wie es anders und kürzer ginge.
Vielen Dank für Eure Mühen, aber soweit läuft mein Programm nun!
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Der Funktionsname `in_db_eintragen` ist etwas verwirrend für eine Funktion, die Daten, die aus einer Datenbank kommen, verändert. Warum werden die überhaupt verändert. Normalerweise enthält eine Datenbank schon die richtigen Daten. Dann erzeugt man auch einfach ein neues Tuple, statt dieses in eine Liste zu verwandeln, um dann ein Element zu ändern.
Antworten