Python: TypeError: 'int' - Objekt ist nicht subscriptable
Bekomme ich einen TypeError, und ich verstehe nicht warum. Der Fehler ist bei c = t[i][0]
(laut debugger). Ich habe 3 char-Gruppen(Listen): g1
, g2
und g3
und ich bin versucht zu ändern, der char index durch Abzug des Schlüssels k1
, k2
oder k3
aus dem index. Was ich nun verwende zum testen:
text = 'abcd'
l_text = [('a', 0), ('b', 1), ('c', 2), ('d', 3)]
k1, k2, k3 = 2, 3, 1
- Und dies ist der code:
def rotate_left(text, l_text, k1, k2, k3):
i = 0
newstr = [None]*len(text)
for t in l_text: # t = tuple
c = t[i][0]
if c in g1: # c = char
l = int(l_text[i][1]) # l = index of the char in the list
if l - k1 < 0:
newstr[l%len(text)-k1] = l_text[i][0]
else:
newstr[l-k1] = l_text[i][0]
elif c in g2:
l = l_text[i][1] # l = index of the char in the list
if l - k1 < 0:
newstr[l%len(text)-k2] = l_text[i][0]
else:
newstr[l-k2] = l_text[i][0]
else:
l = l_text[i][1] # l = index of the char in the list
if l - k1 < 0:
newstr[l%len(text)-k3] = l_text[i][0]
else:
newstr[l-k3] = l_text[i][0]
i += 1
return newstr
Kann jemand mir erklären, warum erhalte ich diese Fehlermeldung und wie behebe ich es? Es ist nicht so, ich bin mit einem int
Typ da. Der debugger zeigt, dass es ein Typ str und es bricht nach der 2. iteration.
PS google hat nicht geholfen
PPS ich weiss, dass es zu viel Wiederholung in den code. Ich Tat es, um zu sehen, in den debugger, was passiert.
UPDATE:
Traceback (most recent call last):
File "/hometriplerotatie.py", line 56, in <module>
print(codeer('abcd', 2, 3, 1))
File "/home/triplerotatie.py", line 47, in codeer
text = rotate_left(text, l_text, k1, k2, k3)
File "/home/triplerotatie.py", line 9, in rotate_left
c = t[i][0]
TypeError: 'int' object is not subscriptable
- Wie Sie diese aufrufen?
- Kann man den stacktrace?
- Auf die Linie bringt diese Ausbeute eine Art Fehler ? Könnte Sie posten die ganze Nachricht ?
- dies ist eine Funktion, die ich nenne, die innerhalb einer anderen Funktion, bearbeitet die post
- Wenn
i == 1
werden Sie versuchen, den index der Ganzzahl.
InformationsquelleAutor itVico | 2015-02-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie indizieren in jedem einzelnen Tupel:
i
beginnt als0
, aber Sie erhöhen es jeder loop-iteration:Den
for
Schleife bindent
auf jedes einzelne Tupel ausl_text
, also erstmalt
gebunden ist('a', 0)
, dann('b', 1)
usw.Also zuerst sind Sie auf der Suche
('a', 0)[0][0]
die'a'[0]
die'a'
. Die nächste iteration, die Sie Blick auf('b', 1)[1][0]
die1[0]
wirft die Ausnahme, denn die ganzen zahlen sind nicht Sequenzen.Müssen Sie entfernen den
i
; Sie nicht halten müssen, um einen Lauf-index hier alsfor t in l_text:
ist bereits was Sie jedes einzelne Tupel.Der Fehler ist hier:
Ich denke, Sie wollen:
Es nicht zu brechen das erste mal um die Schleife, weil wenn
i == 0
,t[i]
ist'a'
und dannt[i][0]
ist auch'a'
.Du machst den index Teil falsch. Ihre Tupel ist 1-dimensional, so dass Sie nicht verwenden können eine 2-D-array-subscript-notation.
Unter der Annahme, dass
sollten Sie verwenden
t[0]
odert[1]
Zuganga
und0
bzw.Hoffe es hilft.. 🙂
Das problem ist, dass t ist ein Tupel, Sie auf die Elemente in einem Tupel, das wie ein Liste. Derzeit ist der Zugang der Elemente wie eine 2D-Liste, die würde, da Sie Ihre Listen führen, die versuchen, für die Indizierung auf ein char.
sollte geändert werden, um