Michal Ludvig wrote:
Hi all,

when I've got a string, say:

URL="http://xyz/blah?session=%(session)s&message=%(message)s"

is it possible to fill in only 'session' and leave "%(message)s" as is
when it isn't present in the values dict?

For example:
URL % { 'session' : 123 }
raises KeyError because of missing 'message' in the dict.

I could indeed replace '%(session)s' with a string replace or regexp but
that's not very elegant ;-)

Is there any way to tell the formatter to use only what's available and
ignore the rest?

You could write a class inheriting from dict which, for example, returns
"%(key)s" if the key "key" is absent:

>>> class IgnoreDict(dict):
        def __getitem__(self, key):
                try:
                        return dict.__getitem__(self, key)
                except KeyError:
                        return "%%(%s)s" % key

                
>>> d = {'session': 123}
>>> URL = "http://xyz/blah?session=%(session)s&message=%(message)s"
>>> URL % d

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    URL % d
KeyError: 'message'
>>> URL % IgnoreDict(d)
'http://xyz/blah?session=123&message=%(message)s'
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to