मान लीजिए हम एक गैर-मौजूद विशेषता तक पहुँचने का प्रयास लापता वस्तु की पकड़ पाने के लिए कैसे:एक विशेषता
>>> {'foo': 'bar'}.gte('foo') # well, I meant “get”!
पायथन के AttributeError
केवल एक स्ट्रिंग समाप्त त्रुटि संदेश युक्त विशेषता args
है: 'dict' object has no attribute 'gte'
और/या traceback
sys.last_traceback
के साथ मॉड्यूल का उपयोग करके, वास्तविक dict ऑब्जेक्ट को पकड़ने का कोई तरीका है?
>>> offending_object = get_attributeerror_obj(sys.last_traceback)
>>> dir(offending_object)
[...
'clear',
'copy',
'fromkeys',
'get', # ah, here it is!
'items',
...]
संपादित करें:;)
के बाद से बिल्ली वैसे भी बैग से बाहर है, मैं अपने निष्कर्ष और कोड (कृपया इस का समाधान नहीं करते कृपया और PyPI के लिए प्रस्तुत,) साझा करेंगे AttributeError
here बनाया गया है, जो दर्शाता है कि मूल वस्तु से जुड़ा कोई स्पष्ट संदर्भ नहीं है।
यहाँ एक ही प्लेसहोल्डर समारोह के साथ कोड:
import sys
import re
import difflib
AE_MSG_RE = re.compile(r"'(\w+)' object has no attribute '(\w+)'")
def get_attributeerror_obj(tb):
???
old_hook = sys.excepthook
def did_you_mean_hook(type, exc, tb):
old_hook(type, exc, tb)
if type is AttributeError:
match = AE_MSG_RE.match(exc.args[0])
sook = match.group(2)
raising_obj = get_attributeerror_obj(tb)
matches = difflib.get_close_matches(sook, dir(raising_obj))
if matches:
print('\n\nDid you mean?', matches[0], file=sys.stderr)
sys.excepthook = did_you_mean_hook
क्या आप डेवलपर से पूछने की तरह कुछ कहने का मतलब है "क्या आपका मतलब gte के बजाय मिलता है"? – karthikr
रुबी के दोहराने की कोशिश कर रहा है [क्या आपका मतलब है ...] (http://www.yukinishijima.net/2014/10/21/did-you-mean-experience-in-ruby.html) कार्यक्षमता, आह? :-) – Kevin
@ केविन: यह पीपीपीआई पर एक शानदार पैकेज होगा! [DidYouMean] (https://pypi.python.org/pypi/DidYouMean/) मौजूद है, लेकिन स्पेल चेकिंग टेक्स्ट के बारे में है, कोड नहीं। – ojdo