News for hackers. Stuff that matters.
Re:Show HN: Cannoli – A compiler for a subset of Python writ... by joncatanio on Thursday May 17, 2018 @08:41PM (#17097658)
I get the same error with your example, but this works fine (Python 3.6.4):

    exec("a = 1")
    print(a)
This will print "1".
Re:Show HN: Cannoli – A compiler for a subset of Python writ... by yorwba on Thursday May 17, 2018 @10:33PM (#17098224)
That is because the exec runs in the global scope. When Python sees a variable that is not assigned to in the local scope, it is assumed to be a global variable, so when exec creates a new local variable, the load still fails because it looks into the globals dictionary.

But you can do this:

  def foo():
    exec("a = 1")
    return locals()['a']