On 3/14/07, Greg Ewing <[EMAIL PROTECTED]> wrote:
>
> I think the difference is that when you see eval()
> you know something dangerous is going on, but most
> uses of format() would be harmless -- *except* when
> given no arguments. It would be an easy thing to
> overlook when reading code.
>
> If this functionality is to be provided, I think
> it should at least have a different method name
> to make it stand out more clearly.

That might be a reasonable difference.  I can think of two possible
counterarguments:  1) if there is always "something dangerous" going
on with eval(), making it harder to write eval(), and making the user
think about which set of variables he really wants to pass in might
not be such a bad thing, either; and 2) the actual percentage of use
cases of ''.format() where "something dangerous" is going on, e.g.
where the programmer has passed a string that he has accepted at face
value from J. Random User, is, realistically, going to be vanishingly
small.  (In most cases, .format will probably immediately follow a
literal string.)

Ian Bicking actually suggested 'somestring'.eval() for this
functionality.  I like that a lot, in the sense that it gives the same
sense of danger as eval('somestring'), but at the same time, I dislike
it intensely because eval('somestring') and 'somestring'.eval() appear
so similar but would give such drastically different results.

If the default usage of locals() / globals() is really that
objectionable, we can certainly take it out.  In that case, I would
suggest that one possible thing to do is:

    1) Make calling format() with no variables raise an exception; and
    2) Monitor the usage and see how often people do

               'somestring'.format(namespace=locals()) or
               'somestring'.format(namespace=(locals(), globals))

If the number of times this extra boilerplate appears in code seems
excessive, then we could either add another method to do the automatic
locals() and globals(), or (since we would know there are no uses of
format() with no variables in the code) reenable the functionality.

Regards,
Pat
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to