您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使Python正常格式化无和不存在的字段

如何使Python正常格式化无和不存在的字段

PEP 3101中的建议是将Formatter子类化:

import string
class PartialFormatter(string.Formatter):
    def __init__(self, missing='~~', bad_fmt='!!'):
        self.missing, self.bad_fmt=missing, bad_fmt

    def get_field(self, field_name, args, kwargs):
        # Handle a key not found
        try:
            val=super(PartialFormatter, self).get_field(field_name, args, kwargs)
            # Python 3, 'super().get_field(field_name, args, kwargs)' works
        except (KeyError, AttributeError):
            val=None,field_name 
        return val

    def format_field(self, value, spec):
        # handle an invalid format
        if value==None: return self.missing
        try:
            return super(PartialFormatter, self).format_field(value, spec)
        except ValueError:
            if self.bad_fmt is not None: return self.bad_fmt   
            else: raise

fmt=PartialFormatter()
data = {'n': 3, 'k': 3.141594, 'p': {'a': '7', 'b': 8}}
print(fmt.format('{n}, {k:.2f}, {p[a]}, {p[b]}', **data))
# 3, 3.14, 7, 8
del data['k']
data['p']['b'] = None
print(fmt.format('{n}, {k:.2f}, {p[a]:.2f}, {p[b]}', **data))
# 3, ~~, !!, ~~

按照设置,~~如果找不到字段或属性,并且!!给定字段值使用了无效格式,它将打印。(如果您要引发认值错误,请仅使用None关键字参数bad_fmt。)

为了处理丢失的钥匙,你需要子类都get_field赶上KeyErrorAttributeErrorformat_field为失踪键返回认值。

由于您正在捕获format_field错误,因此可以通过捕获ValueError超类中的来捕获格式错误的字段。

python 2022/1/1 18:31:46 有204人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶