I give up... was: A = X > Y ? X : Y

Fredrik Lundh effbot at telia.com
Wed Feb 16 22:40:16 CET 2000

Michal Wallace <sabren at manifestation.com> wrote:
> Fredrik Lundh wrote in message ...
> >the problem here is that you'll evaluate the
> >expression in the function's own namespace,
> >not the callers.
> >
> >(you can use trickery or guile to get around
> >that, but I won't post that solution...)
> Okay, I give up... How do you:
> a) know what the caller's namespace even IS
> b) evaluate something in that namespace?

look carefully:

import sys

def magic_eval(s):
        raise None
        frame = sys.exc_traceback.tb_frame.f_back
        return eval(s, frame.f_globals, frame.f_locals)

> Wouldn't that be useful in general for
> experimenting with language enhancements,
> even if the code were a little hairy?

sure.  if you know what you're doing ;-)

def run_me():
    a = "it "
    b = "works!"
    print magic_eval("a+b")


More information about the Python-list mailing list