title: Raising exceptions when an exception is already present in Python 3
body: <p>What happens to my first exception (<code>A</code>) when the second (<code>B</code>) is raised in the following code?</p>
  
  <pre><code>class A(Exception): pass
  class B(Exception): pass
  
  try:
      try:
          raise A('first')
      finally:
          raise B('second')
  except X as c:
      print(c)
  </code></pre>
  
  <p>If run with <code>X = A</code> I get:</p>
  
  <pre>Traceback (most recent call last):
    File "raising_more_exceptions.py", line 6, in 
      raise A('first')
  __main__.A: first
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "raising_more_exceptions.py", line 8, in 
      raise B('second')
  __main__.B: second</pre>
  
  <p>But if <code>X = B</code> I get:</p>
  
  <pre>second</pre>
  
  <h1>Questions</h1>
  
  <ol>
  <li>Where did my first exception go?</li>
  <li>Why is only the outermost exception catchable?</li>
  <li>How do I peel off the outermost exception and reraise the earlier exceptions?</li>
  </ol>
  
  <h1>Update0</h1>
  
  <p>This question specifically addresses Python 3, as its exception handling is quite different to Python 2.</p>