[Python-Dev] Catching "return" and "return expr" at compile time

Barry A. Warsaw bwarsaw@cnri.reston.va.us (Barry A. Warsaw)
Tue, 7 Sep 1999 14:07:01 -0400 (EDT)


>>>>> "GW" == Greg Ward <gward@cnri.reston.va.us> writes:

    GW> However, one could certainly envision a world where Python
    GW> issues runtime warnings.  If my time machine were working, I'd
    GW> zip back and suggest to Guido that mistakes with the %
    GW> operator should issue warnings rather than raising exceptions.
    GW> (Ignore the language philosophy issue and presume this would
    GW> be worthwhile.)

Moderately off-topic, but since you brought it up, here's what I use
in Mailman (since site-admins can make mistakes editing their
templates, which contains %(keys)s... we'd like to make Mailman more
robust so it doesn't totally crap out when that happens).

We (hopefully) always interpolate with a SafeDict instead of a raw
Python dictionary.

-Barry

class SafeDict(UserDict):
    """Dictionary which returns a default value for unknown keys.

    This is used in maketext so that editing templates is a bit more robust.
    """
    def __init__(self, d):
        # optional initial dictionary is a Python 1.5.2-ism.  Do it this way
        # for portability
        UserDict.__init__(self)
        self.update(d)

    def __getitem__(self, key):
        try:
            return self.data[key]
        except KeyError:
            if type(key) == StringType:
                return '%('+key+')s'
            else:
                return '<Missing key: %s>' % `key`