title: python 2.7 / exec / what is wrong?
body: <p>I have this code which runs fine in Python 2.5 but not in 2.7:</p>
  
  <pre><code>import sys
  import traceback
  try:
      from io import StringIO
  except:
      from StringIO import StringIO
  
  def CaptureExec(stmt):
      oldio = (sys.stdin, sys.stdout, sys.stderr)
      sio = StringIO()
      sys.stdout = sys.stderr = sio
      try:
          exec(stmt, globals(), globals())
          out = sio.getvalue()
      except Exception, e:
          out = str(e) + "\n" + traceback.format_exc()
      sys.stdin, sys.stdout, sys.stderr = oldio
      return out
  
  print "%s" % CaptureExec("""
  import random
  print "hello world"
  """)
  </code></pre>
  
  <p>And I get:</p>
  
  <pre>
  string argument expected, got 'str'
  Traceback (most recent call last):
    File "D:\3.py", line 13, in CaptureExec
      exec(stmt, globals(), globals())
    File "", line 3, in 
  TypeError: string argument expected, got 'str'
  </pre>