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

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: Alles auswählen

rbreu@zam285:~> python2.5 a18.py
> > > > > > > > Traceback (most recent call last):
  File "a18.py", line 3, in <module>
    s = raw_input('> ')
KeyboardInterrupt
(Mit Python 2.4 und 2.5). :?:
Offizielles Python-Tutorial (Deutsche Version)

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

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:

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

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

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

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

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

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:

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

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:

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
Antworten