ipython / ipython/ipykernel

KeyboardInterrupts not caught in dispatch_shell

Open
#666 0 comments 1 reaction 0 assignees View on GitHub
Dominant language
Python
Stars
734
Forks
412
Avg merge
1d 5h
Merged PRs (30d)
8

Description

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`?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.