title: MemoryError's message as str is empty in Python
body: <p>This is a very silly question, but I'm running some tasks and catching their errors by:</p>
  
  <pre><code>try:
      run_something()
  except Exception as e:
      handle_error(str(e))
  </code></pre>
  
  <p>I want the error message as a String because I'm using a UI and I want to display the error in a window.</p>
  
  <p>The problem can be replicated as:</p>
  
  <pre><code>&gt;&gt;&gt; import numpy as np
  &gt;&gt;&gt; np.range(1e10)
  MemoryError                               Traceback (most recent call last)
  &lt;ipython-input-4-20a59c2069b2&gt; in &lt;module&gt;() 
  ----&gt; 1 np.arange(1e10)
  
  MemoryError: 
  </code></pre>
  
  <p>However, if I try to catch the error and print its message (which I was hoping to be something like "MemoryError":</p>
  
  <pre><code>try:
      np.arange(1e10)
  except Exception as e:
      print(str(e))
      print("Catched!")
  </code></pre>
  
  <p>The only output I get is "Catched!". This is so stupid, I was doing some work with UI's and threading, and took me a while to realise that the problem was a memory error with no message at all.</p>
  
  <p>Is the MemoryError the only Exception that is translated to an empty string? Because if it is the case I can check it. If not, how to get its message as a String?</p>