KeyboardInterrupts not caught in dispatch_shell
- 主要言語
- Python
- スター
- 734
- フォーク
- 412
- 平均マージ
- 1日 5時間
- マージ済み PR(30日)
- 8
説明
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`?
コントリビューションガイド
評価
この issue はまだ評価されていません。