最近我已经做了很多基础的音乐节目,并因此发现自己做这种事情很多应对一些歌曲丢失的元数据:字符串在python格式化
default = {'title': 'Unknown title', 'artist': 'unknown Artist'}
default.update(song)
print '{title} - {artist}'.format(**default)
有一个更清洁的方式来做到这一点我试图重写__missing__像这样,但丢失的钥匙仍然抛出KeyError异常:
class Song(dict):
# dictionary with some nice stuff to make it nicer
def __missing__(self, key):
return 'Unknown {key}'.format(key = key)
编辑:对不起,我应该已经明朗,基本上下面的必须工作。
s = Song()
print '{notAKey}'.format(s)
有几个人指出**不是必需的。
编辑2:我解决了我的问题,至少让我满意。这是否清洁是值得商榷的,但对我来说却很有用。
from string import Formatter
class DefaultFormatter(Formatter):
def get_value(self, key, args, kwargs):
# Try standard formatting, then return 'unknown key'
try:
return Formatter.get_value(self, key, args, kwargs)
except KeyError:
return kwargs.get(key, 'Unknown {0}'.format(key))
class Song(dict):
def format(self, formatString):
# Convenience method, create a DefaultFormatter and use it
f = DefaultFormatter()
return f.format(formatString, **self)
所以下面将返回 '未知notAKey'
k = Song()
print k.format('{notAKey}')
只是一个小建议:似乎,你正在做日常使用的应用程序,也许分发它。如果你愿意,那么你应该开始使用[gettext](http://docs.python.org/library/gettext.html) - 你将在以后节省很多麻烦。 – nagisa