Create a new table with all string formatted attribute values, typically in preparation for
        formatted output.
        @param fields: one or more strings, each string is an attribute name to be included in the output
        @type fields: string (multiple)
        @param exprs: one or more named string arguments, to format the given attribute with a formatting string 
        @type exprs: name=string

def formatted_table(self, *fields, **exprs):
        """
        Create a new table with all string formatted attribute values, typically in preparation for
        formatted output.
        @param fields: one or more strings, each string is an attribute name to be included in the output
        @type fields: string (multiple)
        @param exprs: one or more named string arguments, to format the given attribute with a formatting string 
        @type exprs: name=string
        """
        # select_exprs = {}
        # for f in fields:
        #     select_exprs[f] = lambda r : str(getattr,f,None)
        fields = set(fields)
        select_exprs = ODict((f, lambda r, f=f: str(getattr, f, None)) for f in fields)

        for ename, expr in exprs.items():
            if isinstance(expr, basestring):
                if re.match(r'^[a-zA-Z_][a-zA-Z0-9_]*$', expr):
                    select_exprs[ename] = lambda r: str(getattr(r, expr, None))
                else:
                    if "{}" in expr or "{0}" or "{0:" in expr:
                        select_exprs[ename] = lambda r: expr.format(r)
                    else:
                        select_exprs[ename] = lambda r: expr % getattr(r, ename, "None")
        
        return self.select(**select_exprs)