KeyboardInterrupts not caught in dispatch_shell
- Vorherrschende Sprache
- Python
- Sterne
- 734
- Forks
- 412
- Ø Merge
- 1 T. 5 Std.
- Gemergte PRs (30 T.)
- 8
Beschreibung
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`?
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.