Gần đây tôi đã làm rất nhiều chương trình âm nhạc có trụ sở, và như vậy thấy mình làm loại điều rất nhiều để đối phó với thiếu siêu dữ liệu trong một số bài hát:Chuỗi định dạng trong python
default = {'title': 'Unknown title', 'artist': 'unknown Artist'}
default.update(song)
print '{title} - {artist}'.format(**default)
Có một cách sạch hơn để làm điều này? Tôi đã cố gắng ghi đè __missing__ như vậy nhưng các phím bị thiếu vẫn ném một KeyError:
class Song(dict):
# dictionary with some nice stuff to make it nicer
def __missing__(self, key):
return 'Unknown {key}'.format(key = key)
Chỉnh sửa: Xin lỗi tôi phải rõ ràng hơn, về cơ bản những điều sau đây phải hoạt động.
s = Song()
print '{notAKey}'.format(s)
Một vài người đã chỉ ra rằng ** s không cần thiết.
Chỉnh sửa 2: Tôi đã "giải quyết" sự cố của mình, ít nhất là sự hài lòng của tôi. Nó có thể gây tranh cãi cho dù điều này là sạch hơn, nhưng nó có hiệu quả đối với tôi.
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)
Vì vậy, sau đây sẽ trở về 'notAKey Unknown'
k = Song()
print k.format('{notAKey}')
Chỉ một đề xuất nhỏ: Có vẻ như bạn đang làm đơn xin sử dụng hàng ngày và có thể phân phối nó. Nếu bạn muốn, sau đó bạn nên bắt đầu sử dụng [gettext] (http://docs.python.org/library/gettext.html) - bạn sẽ tự cứu mình khỏi rất nhiều rắc rối sau này. – nagisa