PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : py: Fehler beim Beenden



hehejo
12.08.2004, 19:31
Hallo!

(zum Anhang: einfach in .py umbenennen)
Ich habe in Python einen kleinen Server und einen kleinen Client geschrieben.
Hintergrund ist ein kleiner Chat.

Das alles ist mir schon recht gut gelungen. Gut die Darstellung ist noch mies, aber der eigentliche Client will ich in Java schreiben. Aber vll. mach ich das doch auch mit Tk oder wxWindows.. Aber das ist eine andere Sache.

Leider gibt es beim Beenden des Clients ein Problem. Er lässt sich nicht beenden. Nur wenn ich den Server mit STRG+C beende, beendet sich auch der Client.
Habe ich davor beim Clients STRG+C gedrückt, kommt dann (nach dem Beenden) diese Fehlermeldung:


Error in sys.exitfunc:
Traceback (most recent call last):
File "/usr/lib/python2.3/atexit.py", line 20, in _run_exitfuncs
func(*targs, **kargs)
File "/usr/lib/python2.3/threading.py", line 571, in __exitfunc
t.join()
File "/usr/lib/python2.3/threading.py", line 478, in join
self.__block.wait()
File "/usr/lib/python2.3/threading.py", line 206, in wait
self._note("%s.wait(): got it", self)
KeyboardInterrupt


Ach ja, wenn ich "normal" beende, muss man beim Client erst noch was eingeben. Der wartet nämlich noch auf einen raw_input (die Eingabe).

Schau euch bitte meinen Code an und helft mir.
Ich freue mich auf jeden Tipp!

Mauser
21.08.2004, 12:34
hi,

wie wärs wenn du für das beenden einen exception handler einbaust.
also:


try:
#einlesen von tastatur
except Exception:
print "das programm wird nun beendet"

dann müsste es gehen..ich weiss nur im moment net, welche exception da auftritt. aber da exception ja hierarchisch aufgebaut sind, kannste die oberste ("Exception") nehmen, dann werden alle fehler abgefangen.
mfg
Sebastian

Steve
22.08.2004, 18:14
Du musst bei den Threads irgendeine Execption abfangen, die haben nämlich auf einmal keine Mama mehr :)

steve

hehejo
22.08.2004, 20:30
try:
data_send = raw_input ("")
self.s_connect.send(data_send)
except KeyboardInterrupt:
self.stop();
except EOFError:
pass # liegt es hieran?


Hm, ich glaube es liegt eher daran, dass ich da einen "pass" mache..