मैं एक शब्दकोश है कि कभी कभी गैर-मौजूद कुंजियों के लिए कॉल प्राप्त है, तो मैं कोशिश करते हैं और इन मामलों को संभालने के लिए hasattr
और getattr
का उपयोग करें:शब्दकोशों की सूची मूल्यों पर पाइथन का हैटट्रर हमेशा झूठा देता है?
key_string = 'foo'
print "current info:", info
print hasattr(info, key_string)
print getattr(info, key_string, [])
if hasattr(info, key_string):
array = getattr(info, key_string, [])
array.append(integer)
info[key_string] = array
print "current info:", info
integer = 1
के साथ पहली बार इस चलाता है:
current info: {}
False
[]
current info: {'foo': [1]}
integer = 2
के साथ फिर से इस कोड चल रहा है:
instance.add_to_info("foo", 2)
current info: {'foo': [1]}
False
[]
current info: {'foo': [2]}
पहला रन स्पष्ट रूप से सफल है ({'foo': [1]}
), लेकिन hasattr
झूठी रिटर्न देता है और getattr
प्रक्रिया में 1
के मान को खोने के दौरान दूसरी बार डिफ़ॉल्ट रिक्त सरणी का उपयोग करता है! ऐसा क्यों है?
मैं शापित हो जाऊंगा! मैने सोचा मैं पागल हो गया था। मैंने डिफ़ॉल्ट रूप से इन शब्दकोश परीक्षण स्थितियों के लिए हमेशा 'if/in/else' संरचना का उपयोग किया है। इस बार वास्तविक स्थिति वास्तव में मेरे उदाहरण की तुलना में अधिक जटिल है, कुछ अन्य हैटर्स उड़ान भरने के साथ, मैंने इसके बजाय "वाक्यविन्यास" का पक्ष लिया ... जो स्पष्ट रूप से काम नहीं करता है! मुझे अब से यह गोचा याद होगा, धन्यवाद! –
इसके अलावा, मैं उचित रूप से init में जानकारी से निपट रहा हूं, बस उदाहरण को व्यवस्थित करना चाहता था। –