Seite 1 von 1

suchen und ersetzen.. 1000x im internet gefunden

Verfasst: Montag 19. Februar 2007, 22:11
von danims
Hallo

ich dreh noch durch

ich möcht aus einem string, der jeweils aus einem array kommt, etwas ersetzen

folgendes habe ich 1000x im internet gefunden und funktionieren tuts nie:

mein code:

Code: Alles auswählen

...
while(a < howm):
		arr[a] = arr[a].replace("ersetzdas", "mitdem")
		a = a + 1
...
bekomme immer diesen fehler:

File "web.py", line 36, in ?
arr[a] = arr[a].replace("ersetzdas", "mitdem")
TypeError: 'NoneType' object is not callable


was stimmt da nicht? ich schnalls echt nicht mehr...

Verfasst: Montag 19. Februar 2007, 22:15
von mq
Sieht so aus, als waere das Attribut replace von arr[a] None (und demnach nicht aufrufbar), Das sagt zumindest die Fehlermeldung. Bist du sicher, dass in dem Array normale Instanzen von str bzw. unicode stehen?

Verfasst: Montag 19. Februar 2007, 22:16
von danims
wie finde ich das raus?

Verfasst: Montag 19. Februar 2007, 22:20
von mq
Ich wuerd's mit Debug-Prints machen, auch wenn das kein schoener Stil ist. Sprich, du schreibst vor die Zeile

Code: Alles auswählen

print arr[a]
print type(arr[a])
und guckst, was da steht.

Verfasst: Montag 19. Februar 2007, 22:26
von danims

Code: Alles auswählen

    while(a < howm):
    ^
SyntaxError: invalid syntax
das kam raus...

bei mir steht nun:

Code: Alles auswählen

a = 1
arr = []
	
print arr[a]
print type(arr[a])

	while(a < howm):
		arr[a] = arr[a].replace("ersetzdies", "mitdem")
		a = a + 1

Verfasst: Montag 19. Februar 2007, 22:31
von birkenfeld
Nunja, das "while" ist ohne Grund eingerückt. Das mag Python nicht, da es an der Einrückung Codeblöcke erkennt.

Übrigens: die Klammern um den while-Ausdruck sind unnötig.

Verfasst: Montag 19. Februar 2007, 22:32
von mq
Wenn du einfach so 'ne weitere Einrueckungsebene einbaust, kann das auch nicht funktionieren.
Ausserdem solltest du die prints in die Schleife reinschreiben, fuer den Fall, dass nicht der erste Eintrag in der Liste der ist, der den Fehler verursacht.

Verfasst: Montag 19. Februar 2007, 22:45
von Bernhard
Unabhängig von der Einrückung verstehe ich Deinen Code nicht. Nach Zeile zwei ist arr leer und es gibt darin nichts zu ersetzen. Falls Du arr zwischenzeitlich füllst, denke daran, dass die Zählung bei arr[0] beginnt und nicht bei arr[1] !

Gruß,
Bernhard