Oben Sonne committed e529749

Python 2/3 hack for the exec statement/function

See for changes
with regard to `exec`. The problem here is that we cannot use the
function syntax in Poole already for Python 2.x since we need a
qualified exec, and thus we need the `in` syntax which causes a syntax
error in Py3.

This workaround uses `execfile` in Py2 (which, as a function, does not
cause syntax errors in Py3) and the `exec` function from the builtins in

References issue 8.

Comments (0)

Files changed (1)

 # =============================================================================
+# Python 2/3 hacks
+# =============================================================================
+PY3 = sys.version_info[0] == 3
+if PY3:
+    import builtins
+    exec_ = getattr(builtins, "exec")
+    import tempfile
+    def exec_(code, envdic):
+        with tempfile.NamedTemporaryFile() as tf:
+            tf.write(code)
+            tf.flush()
+            execfile(, envdic)
+# =============================================================================
 # init site
 # =============================================================================
         # execute
         sys.stdout = StringIO.StringIO()
-            exec stmt in macros.copy()
+            exec_(stmt, macros.copy())
             sys.stdout = sys.__stdout__
             abort_iex(page, "statements", stmt, traceback.format_exc())
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.