Repository: spyder-ide/spyder
Pull request: PR: Handle case when kernel fault file doesn't exist and show error with info explaining that no connection was possible (IPython Console)
<!--- Make sure to read the Contributing Guidelines:                   --->
<!--- https://github.com/spyder-ide/spyder/blob/master/CONTRIBUTING.md --->
<!--- and follow PEP 8, PEP 257 and Spyder's code style:               --->
<!--- https://github.com/spyder-ide/spyder/wiki/Dev:-Coding-Style      --->

## Description of Changes

<!--- Explain what you've done and why --->

Seems like passing a `.json` file that doesn't correspond to a kernel connection file (like for example a `.json` that corresponds to a notebook server instance connection file) can cause the kernel fault file to not be initialized causing and error when trying to compute a message to show to the user. Also, add an error message to prevent keep showing the `Connecting to kernel` over the console infowidget when no connection was possible.

A preview:

![connection_file_fault_file](https://github.com/user-attachments/assets/0d71cd4d-151b-463c-ba47-494fbefbc2ea)

### Issue(s) Resolved

<!--- List the issue(s) below, in the form "Fixes #1234"; one per line --->

Fixes #22448


### Affirmation

By submitting this Pull Request or typing my (user)name below,
I affirm the [Developer Certificate of Origin](https://developercertificate.org)
with respect to all commits and content included in this PR,
and understand I am releasing the same under Spyder's MIT (Expat) license.

<!--- TYPE YOUR USER/NAME AFTER THE FOLLOWING: --->
I certify the above statement is true and correct: dalthviz

<!--- Thanks for your help making Spyder better for everyone! --->


Problem statement:
TypeError on connecting to spyder-notebook kernel
## Description

### What steps will reproduce the problem?

<!--- You can use Markdown here --->

* Open a notebook with the Notebook plugin
* Consoles -> Connect to existing kernel
* Select the `spynbserver-*.json` kernel file

### Traceback
```python-traceback
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
```
<details><summary>Duplicated traceback</summary>
<p>

```
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
Traceback (most recent call last):
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1366, in _handle_kernel_died
    super()._handle_kernel_died(since_last_heartbeat)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/qtconsole/frontend_widget.py", line 532, in _handle_kernel_died
    self._kernel_restarted_message(died=True)
  File "/Users/rclary/Library/spyder-6/envs/spyder-runtime/lib/python3.11/site-packages/spyder/plugins/ipythonconsole/widgets/shell.py", line 1381, in _kernel_restarted_message
    "\n" + _("Its crash file is located at:") + " "
TypeError: can only concatenate str (not "NoneType") to str
```
</p>
</details> 

## Versions

* Spyder version: 6.0.0  (standalone)
* Python version: 3.11.9 64-bit
* Qt version: 5.15.8
* PyQt5 version: 5.15.9
* Operating System: macOS-14.6.1-x86_64-i386-64bit

### Dependencies

```
# Mandatory:
aiohttp >=3.9.3                      :  3.10.5 (OK)
asyncssh >=2.14.0,<3.0.0             :  2.17.0 (OK)
atomicwrites >=1.2.0                 :  1.4.1 (OK)
chardet >=2.0.0                      :  5.2.0 (OK)
cloudpickle >=0.5.0                  :  3.0.0 (OK)
cookiecutter >=1.6.0                 :  2.6.0 (OK)
diff_match_patch >=20181111          :  20230430 (OK)
github >=2.3.0                       :  2.4.0 (OK)
importlib_metadata >=4.6.0           :  8.4.0 (OK)
intervaltree >=3.0.2                 :  3.1.0 (OK)
IPython >=8.13.0,<9.0.0,!=8.17.1     :  8.27.0 (OK)
jedi >=0.17.2,<0.20.0                :  0.19.1 (OK)
jellyfish >=0.7                      :  1.1.0 (OK)
jsonschema >=3.2.0                   :  4.23.0 (OK)
keyring >=17.0.0                     :  25.3.0 (OK)
nbconvert >=4.0                      :  7.16.4 (OK)
numpydoc >=0.6.0                     :  1.8.0 (OK)
parso >=0.7.0,<0.9.0                 :  0.8.4 (OK)
pexpect >=4.4.0                      :  4.9.0 (OK)
pickleshare >=0.4                    :  0.7.5 (OK)
psutil >=5.3                         :  6.0.0 (OK)
pygments >=2.0                       :  2.18.0 (OK)
pylint >=3.1,<4                      :  3.2.7 (OK)
pylint_venv >=3.0.2                  :  3.0.3 (OK)
pyls_spyder >=0.4.0                  :  0.4.0 (OK)
pylsp >=1.12.0,<1.13.0               :  1.12.0 (OK)
pylsp_black >=2.0.0,<3.0.0           :  2.0.0 (OK)
pyuca >=1.2                          :  1.2 (OK)
qdarkstyle >=3.2.0,<3.3.0            :  3.2.3 (OK)
qstylizer >=0.2.2                    :  0.2.3 (OK)
qtawesome >=1.3.1,<1.4.0             :  1.3.1 (OK)
qtconsole >=5.6.0,<5.7.0             :  5.6.0 (OK)
qtpy >=2.4.0                         :  2.4.1 (OK)
rtree >=0.9.7                        :  1.3.0 (OK)
setuptools >=49.6.0                  :  73.0.1 (OK)
sphinx >=0.6.6                       :  8.0.2 (OK)
spyder_kernels >=3.0.0,<3.1.0        :  3.0.0 (OK)
superqt >=0.6.2,<1.0.0               :  0.6.7 (OK)
textdistance >=4.2.0                 :  4.6.2 (OK)
three_merge >=0.1.1                  :  0.1.1 (OK)
watchdog >=0.10.3                    :  5.0.1 (OK)
yarl >=1.9.4                         :  1.9.7 (OK)
zmq >=24.0.0                         :  26.2.0 (OK)

# Optional:
cython >=0.21                        :  3.0.11 (OK)
matplotlib >=3.0.0                   :  3.9.2 (OK)
numpy >=1.7                          :  2.1.0 (OK)
pandas >=1.1.1                       :  2.2.2 (OK)
scipy >=0.17.0                       :  1.14.1 (OK)
sympy >=0.7.3                        :  1.13.2 (OK)

# Spyder plugins:
spyder_notebook.notebookplugin 0.6.1 :  0.6.1 (OK)
```

Hints from issue discussion:
Leaving this for 6.0.2 given that 6.0.1 is basically closed.

Commit message: IPython Console: Handle case when kernel fault file doesn't exist and show error with info explainig no connection was possible

Patch to review:
diff --git a/spyder/plugins/ipythonconsole/widgets/shell.py b/spyder/plugins/ipythonconsole/widgets/shell.py
index 21f805adde4..ea7fa03da73 100644
--- a/spyder/plugins/ipythonconsole/widgets/shell.py
+++ b/spyder/plugins/ipythonconsole/widgets/shell.py
@@ -1395,10 +1395,19 @@ def _kernel_restarted_message(self, died=True):
             and not self.is_remote()
         ):
             # The kernel might never restart, show position of fault file
-            msg += (
-                "\n" + _("Its crash file is located at:") + " "
-                + self.kernel_handler.fault_filename()
-            )
+            # if available else show kernel error
+            if self.kernel_handler.fault_filename():
+                msg += (
+                    "\n" + _("Its crash file is located at:") + " "
+                    + self.kernel_handler.fault_filename()
+                )
+            else:
+                self.ipyclient.show_kernel_error(
+                    _("Unable to connect with the kernel. If you are trying "
+                      "to connect to an existing kernel check that the "
+                      "connection file actually corresponds with the kernel "
+                      "you want to connect to")
+                )
 
         self._append_html(f"<br>{msg}<br>", before_prompt=False)
         self.insert_horizontal_ruler()


Code review comments:
diff_hunk: @@ -1395,10 +1395,19 @@ def _kernel_restarted_message(self, died=True):
             and not self.is_remote()
         ):
             # The kernel might never restart, show position of fault file
-            msg += (
-                "\n" + _("Its crash file is located at:") + " "
-                + self.kernel_handler.fault_filename()
-            )
+            # if available else show kernel error
+            if self.kernel_handler.fault_filename():
+                msg += (
+                    "\n" + _("Its crash file is located at:") + " "
+                    + self.kernel_handler.fault_filename()
+                )
+            else:
+                self.ipyclient.show_kernel_error(
+                    _("Unable to connect with the kernel. If you are trying "
+                      "to connect to an existing kernel check that the "
+                      "connection file actually corresponds with the kernel "
+                      "you want to connect to")
path: spyder/plugins/ipythonconsole/widgets/shell.py
text: @user1:
```suggestion
                    _(
                        "It was not possible to connect to the kernel. If you "
                        "are trying to connect to an existing kernel, check "
                        "that the connection file you selected actually "
                        "corresponds to the kernel you want to connect to."
                    )
```