Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
值不正确的Python字符串格式_Python_Python 3.x - Fatal编程技术网

值不正确的Python字符串格式

值不正确的Python字符串格式,python,python-3.x,Python,Python 3.x,我有一个字符串,我想格式化,但是我用来格式化的值可能是正确的值,也可能不是正确的值,或者没有。在任何情况下,如果传递了其中一个不正确的值,我仍然希望格式化字符串,但忽略任何不起作用的值。例如: mystring = "{:02d}:{:02d}" mystring.format('', 1) 在本例中,我希望我的输出为:01,从而否定了字符串中第一个值不起作用的事实。我看着像这样的东西 class Default(dict): def __missing__(self, key):

我有一个字符串,我想格式化,但是我用来格式化的值可能是正确的值,也可能不是正确的值,或者没有。在任何情况下,如果传递了其中一个不正确的值,我仍然希望格式化字符串,但忽略任何不起作用的值。例如:

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}"

但是,由于我没有使用字典来查找值,我认为这个解决方案对我不起作用。

您可以尝试一下,但要检查每个值是否有效:

out = []
for v in ['', 1]:
    # Check if v can be converted to a decimal number
    try:
        out.append(format(v, '02d'))
    except (ValueError, TypeError):
        out.append('')

print(':'.join(out))  # -> :01

您可以使用try-except检查每个值是否有效:

out = []
for v in ['', 1]:
    # Check if v can be converted to a decimal number
    try:
        out.append(format(v, '02d'))
    except (ValueError, TypeError):
        out.append('')

print(':'.join(out))  # -> :01

您可以编写自己的格式化程序并重写以捕获这些错误,只返回空字符串。以下是您可能希望编辑以仅捕获某些错误的基本信息:

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

您可以编写自己的格式化程序并重写以捕获这些错误,只返回空字符串。以下是您可能希望编辑以仅捕获某些错误的基本信息:

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

除了在return语句中,还有什么方法可以合并其他值吗?例如,可选参数。例如,如果我想返回missing:01而不是空白字符串?@AGH_如果在except块中返回'missing',则会得到missing:01。如果这对你不起作用?我想会的,但它不起作用。我在return语句中返回的format_field函数中添加了一个可选参数,但是,它似乎只是跳过了它。我仍然返回:01。我应该指定,我向函数添加了可选参数,并且return语句正在返回该参数。这是不起作用的部分。除了在return语句中,还有什么方法可以合并其他值吗?例如,可选参数。例如,如果我想返回missing:01而不是空白字符串?@AGH_如果在except块中返回'missing',则会得到missing:01。如果这对你不起作用?我想会的,但它不起作用。我在return语句中返回的format_field函数中添加了一个可选参数,但是,它似乎只是跳过了它。我仍然返回:01。我应该指定,我向函数添加了可选参数,并且return语句正在返回该参数。那是不起作用的部分。