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