KeyboardInterrupt/EOF bei raw_input

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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

KeyboardInterrupt/EOF bei raw_input

Beitragvon Rebecca » Freitag 21. September 2007, 12:05

Folgendes Programm:

Code: Alles auswählen

while True:
    try:
        s = raw_input('> ')
    except:
        pass


Ich haette gedacht, dass ich dieses Programm jetzt mit Ctrl-D und Ctrl-C nicht mehr abbrechen koennen sollte. Aber sobald ein Ctrl-C auf ein Ctrl-D folgt gibts das hier:

[code=]rbreu@zam285:~> python2.5 a18.py
> > > > > > > > Traceback (most recent call last):
File "a18.py", line 3, in <module>
s = raw_input('> ')
KeyboardInterrupt[/code]

(Mit Python 2.4 und 2.5). :?:
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 21. September 2007, 12:12

Wenn ich mich richtig erinnere fängt ein reines ``except`` nur Exceptions ab. Aber KeyboardInterrupt erbt nicht von ``Exception``, sondern nur von ``BaseException``.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Freitag 21. September 2007, 12:32

Das merkwuerdige: Wenn ich das Programm starte und Ctrl-C druecke, gehts. Wenn ich das Programm starte und Ctrl-D druecke, gehts. Wenn ich das Programm starte und Ctrl-C und danach (im nachsten Schleifen-Durchlauf) Ctrl-D druecke, gehts. Nur wenn ich ein Ctrl-C nach einem Ctrl-D druecke, sehe ich die Exception.

Und die Variante, statt einem allgemeinen except ein except (KeyboardInterrupt, EOFError) zu schreiben, tut das gleiche.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Freitag 21. September 2007, 12:55

Moin,

Rebecca hat geschrieben:Das merkwuerdige: Wenn ich das Programm starte und Ctrl-C druecke, gehts. Wenn ich das Programm starte und Ctrl-D druecke, gehts. Wenn ich das Programm starte und Ctrl-C und danach (im nachsten Schleifen-Durchlauf) Ctrl-D druecke, gehts. Nur wenn ich ein Ctrl-C nach einem Ctrl-D druecke, sehe ich die Exception.

Und die Variante, statt einem allgemeinen except ein except (KeyboardInterrupt, EOFError) zu schreiben, tut das gleiche.


hört sich nach einem Bug an. Kannst den ja mal auf http://bugs.python.org/ melden.

Gruß,
Manuel
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Beitragvon Zap » Freitag 21. September 2007, 15:40

Ich kann den Bug bei mir nicht nachvollziehen. Habe das Skript unter WindowsXP ausprobiert, allerdings nur KeyboardInterrupt abgefangen.
Keine der genannten Tastenkombos warf ne Exception...

EDIT: OK, das EOFError brauch ich auch, aber dann bekomme ich auch keine Exception...
BlackJack

Beitragvon BlackJack » Freitag 21. September 2007, 15:49

Unter Windows ist Strg-D auch Strg-Z ─ das ist das Signal an das Terminal bzw. die Eingabeaufforderung die Verbindung zur Standardeingabe des Programms zu schliessen.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Beitragvon Zap » Samstag 22. September 2007, 07:48

Jo, ich weiß aber aber wie gesagt ich bekomme keine Exception ...
Schaffe es nicht das Skript über irgendwelche Tastenkombinationen zu beenden. Ich könnte mir höchstens vorstellen, das eine Shell unter Linux u.U. anders mit dem Signal umgeht.
lunar

Beitragvon lunar » Samstag 22. September 2007, 19:17

Ich kann das Verhalten hier unter Gentoo nachvollziehen. Allerdings ändert sich das, sobald man readline importiert. Dann ist das Programm tatsächlich nicht mehr aabzubrechen, es wird keine Exception angezeigt.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 26. September 2007, 13:00

Habs als bug submittiert: http://bugs.python.org/issue1195
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 26. September 2007, 19:31

Ich hab dir schon was dazugeschrieben...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 26. September 2007, 19:42

Jo. Dachte nur, da ich hier nunmal diesen Thread gestartet hab, interessiert es die andern auch. :D
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]