import sys file = open('foo.py', 'w') file.write('x = 1') file.close() toplevel = """ x = 3 print x, %s %s %s """ outside = """ x = 3 def f(): print x, %s %s %s f() """ inside = """ def f(): x = 3 print x, %s %s %s f() """ for template in [toplevel, outside, inside]: for print1, print2 in [('print x', ''), ('def g(): print x', 'g()')]: for statement in ['from foo import *', 'exec("x = 1")', 'x = 1']: code = template % (statement, print1, print2) # print code try: exec code in {} except: print sys.exc_type, sys.exc_value print