Hacker News new | ask | show | jobs
by dcrosta 5164 days ago
It turns out that this is not actually as surprising as I had first thought -- del unbinds a variable from the (local) scope. Since exec results in a new Python frame, it is in that frame's scope that x is deleted, not in the outer frame (of the function exec_code_object_and_return_x).

I'm in the process of blogging about this and other quirks of exec -- I'll post back here once that's up.

1 comments

At least for Python 2.7, you would expect the code run with exec to share the locals and globals with the environment where you called exec from. Thats why the x = x + 1 works, after all.
After reading through the bug you linked, now I agree with your statement and not with my first comment here. Will the madness never end?