Skip to content

KeyboardInterrupts not caught in dispatch_shell #666

@marcom-db

Description

@marcom-db

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions