Problem mit .split()

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
Krauzi
User
Beiträge: 77
Registriert: Montag 22. Oktober 2007, 18:06
Kontaktdaten:

Montag 15. September 2008, 19:41

Hi, wenn ich das hier in der Python Shell ausprobiere, bekomme ich folgenden fehler:
Traceback (most recent call last):
File "<pyshell#131>", line 1, in <module>
request(str(kit))
TypeError: 'list' object is not callable
Mein Code:

Code: Alles auswählen

def request(kit):

	kitType, kitType2 = kit.split(":")

	if kitType == 'Sniper':
		if kitType2 == 1:
 			print "Requesting Sniper Kit v.1"

text = '/request Sniper:2'

if text.find('/') == 0:
	request = text.split(" ")
	if request[0] == '/request':
		request(request[1])
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Montag 15. September 2008, 19:49

Warum nennst du deine Variable denn wie deine Funktion? Woher soll der Interpreter denn wissen wann du deine Funktion und wann deine Variable meinst? Momentan ist er wohl der Meinung das 'request' keine Funktion ist sonder ein 'list' object - und das kannst nicht aufrufen. Das sagt er dir aber sogar
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Montag 15. September 2008, 19:50

Es ist auch überaus ungünstig, wenn du innerhalb der Funktion request eine Liste gleichen Namens definierst. Wie soll der Interpreter in Zeile 15 denn wissen, was davon deine Funktion und was deine Liste ist?
Da die Liste zuletzt definiert wurde, spricht er die Liste an versucht, statt des Funktionsaufrufs einen Listenaufruf ... das klappt dann eben nicht.

Lösung: Umbenennen ...
Krauzi
User
Beiträge: 77
Registriert: Montag 22. Oktober 2007, 18:06
Kontaktdaten:

Montag 15. September 2008, 19:51

Lonestar hat geschrieben:Warum nennst du deine Variable denn wie deine Funktion? Woher soll der Interpreter denn wissen wann du deine Funktion und wann deine Variable meinst? Momentan ist er wohl der Meinung das 'request' keine Funktion ist sonder ein 'list' object - und das kannst nicht aufrufen. Das sagt er dir aber sogar
Achso, das bedeutet das list. Hab zwar dran gedacht; war dann aber doch überzeugt, dass er wenn er eine variale mit darauffolgenden klammern entdeckt, automatisch auf funktion "um"schaltet.

EDIT: Ja es lagt wirklich daran. Thx an alle.
BlackJack

Montag 15. September 2008, 20:54

Funktionen sind Objekte wie alle anderen auch, da kann man nichts "umschalten".
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 15. September 2008, 22:08

Krauzi hat geschrieben:Hab zwar dran gedacht; war dann aber doch überzeugt, dass er wenn er eine variale mit darauffolgenden klammern entdeckt, automatisch auf funktion "um"schaltet.
Python ist kein Lisp-2 wie Common Lisp wo es mehrere Namensräume jeweils für Funktionen, Variablen und allerhand anderen Kram gibt. Eigentlich ist Python gar kein Lisp und das Lisp dem Python am meisten ähnelt wäre eher Scheme, das nur einen Namensraum für alles hat.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten