首页 > 解决方案 > 值不正确的 Python 字符串格式

问题描述

我有一个要格式化的字符串,但我用来格式化的值可能是也可能不是正确的值(None'')。无论如何传递了这些不正确的值之一,我仍然希望字符串格式化,但忽略任何不起作用的值。例如:

mystring = "{:02d}:{:02d}"
mystring.format('', 1)

在这种情况下,我希望我的输出是,从而否定了对于字符串中的第一个值不起作用:01的事实。''我看着像

class Default(dict):
    def __missing__(self, key): 
        return key.join("{}")

d = Default({"foo": "name"})

print("My {foo} is {bar}".format_map(d)) # "My name is {bar}"

但由于我没有使用字典作为值,我认为这个解决方案不适合我。

标签: pythonpython-3.x

解决方案


您可以编写自己的格式化程序并覆盖format_field()以捕获这些错误并仅返回空字符串。这是基础知识(您可能想要编辑以仅捕获某些错误):

import string

class myFormat(string.Formatter):
    def format_field(self, value, format_spec):
        try:
            return super().format_field(value, format_spec)
        except ValueError:
            return ''

fmt = myFormat()
mystring = "{:02d}:{:02d}"

print(fmt.format(mystring, *(2, 1)))
# 02:01

print(fmt.format(mystring, *('', 1)))
# :01

推荐阅读