title: Exceptions must derive from BaseException
body: <p>What am I missing here?</p>
  <pre><code>import sys
  
  class MyBaseError(BaseException):
      def __init__(self, message, base_message=None, *args):
          
          self.message = message
          self.base_message = base_message
          super(MyBaseError, self).__init__()
          
          
      def __str__(self):
          if self.base_message is None:
              return self.message
          
          return self.message + &quot; '&quot; + str(self.base_message) + &quot;'&quot;
          
          
  class MyError(MyBaseError):
      &quot;&quot;&quot;
      &quot;&quot;&quot;
      
  class MyTypeError(MyError):
      &quot;&quot;&quot;
      &quot;&quot;&quot;
  
  def run_me():
      raise MyTypeError(&quot;run_me&quot;)
      
  
  def sayonara():
      try:
          run_me()
      except (MyBaseError) as e:
          raise(MyBaseError(&quot;unable to run&quot;,
                             e,
                             e.args),
                  sys.exc_info()[2])
          
  sayonara()
  </code></pre>
  <p>Error:</p>
  <pre><code>Traceback (most recent call last):
    File &quot;main.py&quot;, line 32, in sayonara
      run_me()
    File &quot;main.py&quot;, line 27, in run_me
      raise MyTypeError(&quot;run_me&quot;)
  __main__.MyTypeError: run_me
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File &quot;main.py&quot;, line 42, in &lt;module&gt;
      sayonara()
    File &quot;main.py&quot;, line 40, in sayonara
      sys.exc_info()[2])
  TypeError: exceptions must derive from BaseException
  </code></pre>
  <p>MyBaseError class is already deriving from BaseException.</p>