One more data point: On the Python side, exec has documentation (https://docs.python.org/3/library/functions.html#exec) that nicely reflects what’s going on in the frame code (where globals must be a dict but locals can be any mapping object).
I’ll file a bug to see what people think about loosening the restrictions in the C API (which will make it match exec’s documented restrictions). Thanks, Matt On Jul 14, 2015, at 2:47 PM, Brett Cannon <br...@python.org> wrote: > > > On Tue, Jul 14, 2015 at 11:39 AM Matthew Keeter <matt.j.kee...@gmail.com> > wrote: > The docs for PyRun_String say that both globals and locals should be > dictionaries [1]. > > However, digging into the source [2] shows me that locals doesn’t need to be > a dictionary; > it just needs to implement the mapping protocol. Is it a bad idea to rely on > this fact? > > (Context: I’m plugging a custom object into locals that uses __getitem__ to > track lookups.) > > As you pointed out in the code, that's in the frame creation code and not > directly the PyRun_StringFlags code, so technically there is a chance for us > to insert a PyDict_CheckExact() call before hitting the code you linked to. > > As to whether we could loosen the documented restrictions so they are > guaranteed, it would be best to file an issue at bugs.python.org requesting > the restriction be officially loosened and if people are amenable then a test > to make sure no one accidentally breaks the API promise.
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com