比方说我有:
action = '{bond}, {james} {bond}'.format(bond='bond', james='james')
Run Code Online (Sandbox Code Playgroud)
这个输出:
'bond, james bond'
Run Code Online (Sandbox Code Playgroud)
接下来我们有:
action = '{bond}, {james} {bond}'.format(bond='bond')
Run Code Online (Sandbox Code Playgroud)
这将输出:
KeyError: 'james'
Run Code Online (Sandbox Code Playgroud)
是否有一些解决方法可以防止此错误发生,例如:
如果我用Python写:
data = {'n': 3, 'k': 3.141594, 'p': {'a': 7, 'b': 8}}
print('{n}, {k:.2f}, {p[a]}, {p[b]}'.format(**data))
del data['k']
data['p']['b'] = None
print('{n}, {k:.2f}, {p[a]}, {p[b]}'.format(**data))
Run Code Online (Sandbox Code Playgroud)
我明白了:
3, 3.14, 7, 8
Traceback (most recent call last):
File "./funky.py", line 186, in <module>
print('{n}, {k:.2f}, {p[a]}, {p[b]}'.format(**data))
KeyError: 'k'
Run Code Online (Sandbox Code Playgroud)
而不是错误消息,我如何让Python更优雅地格式化None和不存在的字段?
举个例子,我想在输出中看到更像:
3, 3.14, 7, 8
3, ~, 7, ~
Run Code Online (Sandbox Code Playgroud)
当然,理想情况下,我希望能够指定使用的字符串而不是那些缺少的值.
如何从字符串中检索预期的格式键名称?
可以说我有:
"This string expects {expected}"
Run Code Online (Sandbox Code Playgroud)
如果我输入错误的键名,python 会抛出一个 KeyError,显示预期的名称。
"This string expects {expected}".format(whoops="wrong key")
KeyError: 'expected'
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在没有正则表达式或(呃)故意抛出 KeyError 的情况下对此进行测试?我查看了字符串文档,但什么也没引起我的注意。
编辑1:
我不想抑制错误,也不想默默地用 None/空字符串填充它。我想使用预期的键名来正确格式化字符串。
我可以通过将字符串映射到字典中的键名来在上游重新处理它,但希望如果有办法在事后找到它来避免这种情况。
正则表达式将是一个很好的解决方案,但此时我只是好奇。