Tony Nelson wrote: > I'm trying to find out what is eating some KeyboardInterrupt exceptions > in a fairly large program (yum). My KeyboardInterrupt handler is called > for some Ctl-C presses, but for others nothing seems to happen.
> ... I'd like to use a debugger to trace > KeyboardInterrupt exceptions, make sure that they're happening, and see > what is handling them. I don't know how to do that in Idle. You can replace the default Ctrl-C interrupt handler with your own and use that to inspect the current stack. For example, >>> import signal >>> signal.getsignal(signal.SIGINT) <built-in function default_int_handler> >>> prev_handler = signal.getsignal(signal.SIGINT) >>> def new_int_handler(*args): ... print "Keyboard Interrupt!" ... traceback.print_stack() ... prev_handler(*args) ... >>> signal.signal(signal.SIGINT, new_int_handler) <built-in function default_int_handler> >>> def spin(): ... while 1: pass ... >>> import traceback >>> spin() ^CKeyboard Interrupt! File "<stdin>", line 1, in ? File "<stdin>", line 2, in spin File "<stdin>", line 3, in new_int_handler Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in spin File "<stdin>", line 4, in new_int_handler KeyboardInterrupt >>> There's no real need to call the old handler. You could "raise KeyboardInterrupt" or SystemExit or just ignore it, as in >>> count = 0 >>> def new_int_handler(signum, frame): ... global count ... print messages[count] ... if count >= len(messages)-1: ... raise KeyboardInterrupt ... count += 1 ... >>> messages = {0: "Sorry, did you want me to do something?", ... 1: "That's ticklish!", ... 2: "Now, where did that off button go to....", ... 3: "Do that again and I'll leave.", ... 4: "Shutdown activated"} >>> >>> def spin(): ... while 1: pass ... >>> spin() ^CTraceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in spin KeyboardInterrupt >>> >>> import signal >>> signal.signal(signal.SIGINT, new_int_handler) <built-in function default_int_handler> >>> >>> spin() ^CSorry, did you want me to do something? ^CThat's ticklish! ^CNow, where did that off button go to.... ^CDo that again and I'll leave. ^CShutdown activated Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in spin File "<stdin>", line 5, in new_int_handler KeyboardInterrupt >>> Andrew [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list