[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