[Python-3000] string.Formatter class (original) (raw)

Eric Smith eric+python-dev at trueblade.com
Tue Aug 28 22:33:42 CEST 2007


Eric Smith wrote:

One of the things that PEP 3101 deliberately under specifies is the Formatter class, leaving decisions up to the implementation. Now that a working implementation exists, I think it's reasonable to tighten it up.

I should also have included the recipe for the 'smart' formatter mentioned in the PEP, which automatically searches local and global namespaces:

import inspect from string import Formatter

class SmartFormatter(Formatter): def vformat(self, format_string, args, kwargs): self.locals = inspect.currentframe(2).f_locals return super(SmartFormatter, self).vformat(format_string, args, kwargs)

 def get_value(self, key, args, kwargs):
     if isinstance(key, basestring):
         try:
             # try kwargs first
             return kwargs[key]
         except KeyError:
             try:
                 # try locals next
                 return self.locals[key]
             except KeyError:
                 # try globals last
                 return globals()[key]
     else:
         return args[key]

def func(): var0 = 'local--0' print(fmt.format('in func 0:{var0} 1:{var1}'))

fmt = SmartFormatter()

var0 = 'global-0' var1 = 'global-1' func()

print(fmt.format('in module 0:{var0} 1:{var1}'))

This code produces: in func 0:local--0 1:global-1 in module 0:global-0 1:global-1



More information about the Python-3000 mailing list