code: def setup_ipython(self):
          
          if self.is_ipysetup:
              return
  
          from ipykernel.kernelapp import IPKernelApp
  
          self.shell = IPKernelApp.instance().shell  # None in PyCharm console
  
          if not self.shell and is_ipython():
              self.shell = get_ipython()
  
          if self.shell:
              shell_class = type(self.shell)
              shell_class.default_showtraceback = shell_class.showtraceback
              shell_class.showtraceback = custom_showtraceback
              self.is_ipysetup = True
          else:
              raise RuntimeError("IPython shell not found.")
docs: Monkey patch shell's error handler.
  
          This method is to monkey-patch the showtraceback method of
          IPython's InteractiveShell to
  
          __IPYTHON__ is not detected when starting an IPython kernel,
          so this method is called from start_kernel in spyder-modelx.