Hello all, I ran into a rather strange problem when interrupting a raw_input call with Ctrl-C. This is with python 2.6.3 on Windows 7. When the call is interrupted, one of two things happen - either a KeyboardInterrupt exception is raised or raw_input raises EOFError, and KeyboardInterrupt is raised a line or two later. Here's the example that I'm testing with:
import sys import traceback print '===' excs = [] try: try: raw_input() except BaseException as exc: excs.append(sys.exc_info()) print '1', type(exc) except BaseException as exc: excs.append(sys.exc_info()) print '2', type(exc) print '---' for exc in excs: traceback.print_exception(*exc) print '===' And here are all the two different outputs that I've received at random times: === 1 <type 'exceptions.KeyboardInterrupt'> --- Traceback (most recent call last): File "client.py", line 26, in <module> raw_input() KeyboardInterrupt === === 1 2 <type 'exceptions.KeyboardInterrupt'> --- Traceback (most recent call last): File "client.py", line 26, in <module> raw_input() EOFError Traceback (most recent call last): File "client.py", line 29, in <module> print '1', type(exc) KeyboardInterrupt === This makes no sense to me. First, where does raw_input get EOF (Ctrl-Z or F6) from? Second, why is KeyboardInterrupt raised in the middle of executing a print instruction and not at raw_input? Third, if the inner except clause finishes too soon (for example, if I comment out the print statement), then the KeyboardInterrupt is sometimes raised at the print '---' line. This makes it difficult to consistently handle a Ctrl-C event without calling something like sleep after an EOFError. I don't recall seeing this problem in Windows XP, but I'm not able to test on it right now. Is this problem related to Windows 7 in some way? - Max -- http://mail.python.org/mailman/listinfo/python-list