如何让Python优雅地格式化无和不存在的字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何让Python优雅地格式化无和不存在的字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1963字,纯文字阅读大概需要3分钟。
内容图文
![如何让Python优雅地格式化无和不存在的字段](/upload/InfoBanner/zyjiaocheng/712/237d4fcf06e743b9bb7264e83e24b5d2.jpg)
参见英文答案 > Leaving values blank if not passed in str.format 7个
如果我用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))
我明白了:
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'
而不是错误消息,我如何让Python更优雅地格式化None和不存在的字段?
举个例子,我想在输出中看到更像:
3, 3.14, 7, 8
3, ~, 7, ~
当然,理想情况下,我希望能够指定使用的字符串而不是那些缺少的值.
解决方法:
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, ~~, !!, ~~
设置时,如果找不到字段或属性,它将打印~~ !!如果给定字段值,则使用无效格式. (如果你想要提出一个值错误的默认值,只需对关键字参数bad_fmt使用None.)
要处理缺少的键,您需要将get_field子类化为捕获KeyError或AttributeError,并将format_field子类化为缺少键的缺省值.
由于您正在捕获format_field错误,因此您可以通过从超类中捕获ValueError来捕获错误的格式字段.
内容总结
以上是互联网集市为您收集整理的如何让Python优雅地格式化无和不存在的字段全部内容,希望文章能够帮你解决如何让Python优雅地格式化无和不存在的字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。