Seite 1 von 1

Problem mit .split()

Verfasst: Montag 15. September 2008, 19:41
von Krauzi
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])

Verfasst: Montag 15. September 2008, 19:49
von Lonestar
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

Verfasst: Montag 15. September 2008, 19:50
von numerix
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 ...

Verfasst: Montag 15. September 2008, 19:51
von Krauzi
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.

Verfasst: Montag 15. September 2008, 20:54
von BlackJack
Funktionen sind Objekte wie alle anderen auch, da kann man nichts "umschalten".

Verfasst: Montag 15. September 2008, 22:08
von Leonidas
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.