title: exec returns a nonetype, when I need the return value
body: <p>I asked a question earlier, but ran into a second problem.</p>
  
  <p>I am writing a program that reads in a text file, and executes all code within the file. This is for class, and we have to use <code>exec()</code> </p>
  
  <p>I get this error upon running the code, and countless searching has not led me to a solution.</p>
  
  <pre><code>Traceback (most recent call last):
    File "doxecute.py", line 28, in &lt;module&gt;
      replace_code(statements, contents)
    File "doxecute.py", line 17, in replace_code
      contents = contents.replace("{%" + statement + "%}", statement)
  TypeError: Can't convert 'NoneType' object to str implicitly
  </code></pre>
  
  <p>Code is</p>
  
  <pre><code>import sys
  import re
  
  
  
  def sortecute(data): 
      funcs = re.findall(r'{%(.*?)%}',data,re.DOTALL)#find executable statements
      return funcs
  
  def replace_code(statements, contents):
      for statement in statements:
          if not statement[5:].startswith("print("):
              exec(statement[5:]) #execute code after the (letter)
              contents = contents.replace("{%" + statement + "%}", "")
          else:
              statement = exec(statement[5:])#error is here
              contents = contents.replace("{%" + statement + "%}", statement)
  
      print(contents)
  
  f = open(sys.argv[1],"r")
  contents = f.read()
  f.close()
  
  statements = sortecute(contents) #get data from file
  statements  = sorted(statements) #sorts by letter
  
  replace_code(statements, contents)
  </code></pre>
  
  <p>this is the file I read in.</p>
  
  <pre><code>The number {% (c) print(x) %} is a random number between 1 and 6
  inclusive. If we multiply it by 2, we get {% (d) print(2*x) %}.
  
  What's interesting is that the statements may appear out of order in the
  document. {% (a) import random %} Thus I might generate the random
  number in a location in the document well after referencing it.
  {% (b) x = random.randint(1,6) %}
  </code></pre>
  
  <p>I can not find out how to get the value of the statement for exec. Can someone explain to me how to use this properly in the way listed below</p>
  
  <pre><code>You will need to use the exec function in Python. To get the output back, you will need to redirect output to your own stream. Your program should accept a filename as a command-line argument to operate on [8]
  </code></pre>