namespace/dictionary quandry

Alex Martelli aleaxit at yahoo.com
Wed Sep 22 13:18:52 EDT 2004


Jack Carter <jcarter at johmar.engr.sgi.com> wrote:
   ...
> The solution it would seem would be to do the evaluation
> later within the called function. That way I could assume
> that all failed eval()'ed names are literals meant for my
> command and not a python variable/name.
> 
> If this makes sense, the problem I need to solve is how to
> deliver the correct namespace dictionary to the called function
> so I can invoke eval with it.
> 
> Does this make sense?

Not very, but then I didn't follow the previous LONG posts on this
thread, so I'll just answer this specific question and hope it helps.
I'll assume the known variable-names are in some dictionary (such as a
locals() or globals() or vars(something)):

class WeirdNamespace:
    def __init__(self, d): self.d = d
    def __getitem__(self, n): return self.d.get(n,repr(n))

voila: if n is a key in dict d, this returns the corresponding value,
otherwise it returns n suitably quoted.  Just pass to eval a
WeirdNamespace(d) rather than the bare d.

It appears to me your user interface is courting trouble: if I mispell
'variablename' as 'varaiblename' I end up creating a file I didn't mean
to rather than getting a clean error about unknown variable names.  But
I'll assume you know your users better than I do and that they _do_
really desire with all their hearts this unholy confusion between
variables and constants...


Alex



More information about the Python-list mailing list