[Python-Dev] Non implementation dependent access to calling scope
"Martin v. Löwis"
martin at v.loewis.de
Sat Mar 10 13:57:42 CET 2007
Michael Foord schrieb:
> Hello all,
>
> I realise that this may be more relevant to Python ideas, in which case
> feel free to ignore this (and my apologies).
>
> I occasionally see code looking (something) like :
>
>
> calling_scope = sys._getframe(1).f_globals['__name__']
>
> This looks and smells like a hack (not least because of the warning in
> the documentation about _getframe),
Right. This should some helper functions in inspect (which currently
aren't there).
> plus stack frames are an
> implementation detail so this code is broken on IronPython.
I don't think there is much you can do about this. Local variables are
also an implementation detail.
> It would be great to have a specified way to obtain [a read only view on
> (?)] the locals and globals from the calling scope. Perhaps built in
> functions ?
Please, no builtin functions.
> If they were specified then the IronPython guys would have
> to implement it for us. B-)
I doubt it. If users of IronPython would want that badly enough, it
would be there. sys._getframe has been in CPython for a while, yet
it (apparently) is unavailable in IronPython. I would expect that
implementing what you propose would similar in effort to implementing
sys._getframe.
> I realise that this can allow bad some bad programming patterns, but
> there are times when it can be very useful.
Users who want it can already do it, in CPython. The example you gave
isn't even about locals, but the caller's *globals*. I would guess
that there is already a way in IronPython to get at these, given that
.NET also needs to support stack walks in various places.
Regards,
Martin
More information about the Python-Dev
mailing list