title: Getting original line number for exception in concurrent.futures
body: <p>Example of using concurrent.futures (backport for 2.7):</p>
  
  <pre><code>import concurrent.futures  # line 01
  def f(x):  # line 02
      return x * x  # line 03
  data = [1, 2, 3, None, 5]  # line 04
  with concurrent.futures.ThreadPoolExecutor(len(data)) as executor:  # line 05
      futures = [executor.submit(f, n) for n in data]  # line 06
      for future in futures:  # line 07
          print(future.result())  # line 08
  </code></pre>
  
  <p>Output:</p>
  
  <pre><code>1
  4
  9
  Traceback (most recent call last):
    File "C:\test.py", line 8, in &lt;module&gt;
      print future.result()  # line 08
    File "C:\dev\Python27\lib\site-packages\futures-2.1.4-py2.7.egg\concurrent\futures\_base.py", line 397, in result
      return self.__get_result()
    File "C:\dev\Python27\lib\site-packages\futures-2.1.4-py2.7.egg\concurrent\futures\_base.py", line 356, in __get_result
      raise self._exception
  TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'
  </code></pre>
  
  <p>String <code>"...\_base.py", line 356, in __get_result"</code> is not endpoint I expected to see. Is it possible to get real line where exception was thrown? Something like:</p>
  
  <pre><code>  File "C:\test.py", line 3, in f
      return x * x  # line 03
  </code></pre>
  
  <p>Python3 seems to show correct line number in this case. Why can't python2.7? And is there any workaround?</p>