[Python-Dev] frame.f_locals is writable
Shane Holloway (IEEE)
shane.holloway at ieee.org
Fri Jan 14 18:19:46 CET 2005
> FWIW, this should work:
>
> def replaceFrame(self, ref, oldValue, newValue):
> for name, value in ref.f_locals.items():
> if value is oldValue:
> exec "ref.f_locals[name] = newValue"
> assert ref.f_locals[name] is newValue
>
> And, no, you don't have to tell me that this is an evil hack. I already
> know that, since I discovered it earlier this evening by poking around
> in the C source code for PyFrame_LocalsToFast and then looking to see
> what code calls that function :)
Yes. After poking around in Google with PyFrame_LocalsToFast, I found
some other links to people doing that. I implemented a direct call
using ctypes to make the code explicit about what's happening. I'm just
glad it is possible now. Works fine in both 2.3 and 2.4.
Thanks,
-Shane
More information about the Python-Dev
mailing list