हाल ही में मैं संगीत आधारित प्रोग्रामिंग का एक बहुत कुछ कर दिया गया है, और इस तरह के रूप में अपने आप को बात इस तरह का एक बहुत कुछ कर कुछ गाने में मेटाडाटा लापता से निपटने के लिए लगता है:स्ट्रिंग अजगर में स्वरूपण
default = {'title': 'Unknown title', 'artist': 'unknown Artist'}
default.update(song)
print '{title} - {artist}'.format(**default)
है वहाँ ऐसा करने के लिए एक क्लीनर तरीका? मैं इतना लेकिन लापता कुंजी अभी भी एक KeyError फेंक की तरह __missing__ अधिभावी की कोशिश की:
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