Why can't I handle a KeyboardInterrupt in python?
Posted
by
Josh
on Stack Overflow
See other posts from Stack Overflow
or by Josh
Published on 2011-01-05T17:10:32Z
Indexed on
2011/01/05
17:53 UTC
Read the original article
Hit count: 225
I'm writing python 2.6.6 code on windows that looks like this:
try:
dostuff()
except KeyboardInterrupt:
print "Interrupted!"
except:
print "Some other exception?"
finally:
print "cleaning up...."
print "done."
dostuff()
is a function that loops forever, reading a line at a time from an input stream and acting on it. I want to be able to stop it and clean up when I hit ctrl-c.
What's happening instead is that the code under except KeyboardInterrupt:
isn't running at all. The only thing that gets printed is "cleaning up...", and then a traceback is printed that looks like this:
Traceback (most recent call last):
File "filename.py", line 119, in <module>
print 'cleaning up...'
KeyboardInterrupt
So, exception handling code is NOT running, and the traceback claims that a KeyboardInterrupt occurred during the finally clause, which doesn't make sense because hitting ctrl-c is what caused that part to run in the first place! Even the generic except:
clause isn't running.
EDIT: Based on the comments, I replaced the contents of the try:
block with sys.stdin.read(). The problem still occurs exactly as described, with the first line of the finally:
block running and then printing the same traceback.
© Stack Overflow or respective owner