ipykernel icon indicating copy to clipboard operation
ipykernel copied to clipboard

KeyboardInterrupts not caught in dispatch_shell

Open marcom-db opened this issue 4 years ago • 0 comments

The pre_handler_hook in dispatch_shell sets the SIGINT handler to raise a KeyboardInterrupt if the kernel receives a SIGINT: https://github.com/ipython/ipykernel/blob/master/ipykernel/kernelbase.py#L346

However, the try/except surrounding the pre_handler_hook, and the try/except immediately afterwards on line 349 will not catch a KeyboardInterrupt. KeyboardInterrupt is a subclass of BaseException, but not Exception.

The result is that if a user cancels a running command, and the SIGINT arrives after the pre_handler_hook, but before the try/except in _run_cell in interactiveshell.py: https://github.com/ipython/ipython/blob/master/IPython/core/interactiveshell.py#L2974 , the exception is not caught and the kernel crashes.

Can we update dispatch_shell to catch BaseException?

marcom-db avatar May 10 '21 20:05 marcom-db