मान लीजिए कि आपके पास एक नियमित दिन है जो तीन नामित पैरामीटर (जैसे ** तर्क) स्वीकार करता है, लेकिन इन तीनों में से कोई भी दो भरा होना चाहिए। अगर केवल एक भरा हुआ है, तो यह एक त्रुटि है। यदि तीनों हैं, तो यह एक त्रुटि है। आप किस तरह की त्रुटि उठाएंगे? RuntimeError, एक विशेष रूप से बनाया अपवाद, या अन्य?यदि तर्कों की गलत संख्या ** तर्कों में गुजरती है तो उठाने का क्या अपवाद है?
उत्तर
याद रखें कि आप पाइथन के अंतर्निहित अपवाद वर्गों को उपclass कर सकते हैं (और TypeError
निश्चित रूप से यहां बढ़ने के लिए सही अंतर्निहित अपवाद वर्ग होगा - यही वह है जो पाइथन उठाता है यदि तर्क की संख्या सामान्य रूप से हस्ताक्षर से मेल नहीं खाती है हस्ताक्षर में *a
या **k
के बिना मामले)। मैं हर पैकेज को परिभाषित की जरूरत के रूप में अपने स्वयं के class Error(Exception)
, और फिर विशिष्ट अपवाद के रूप में उपयुक्त वारिस गुणा कर सकते हैं, उदा .:
class WrongNumberOfArguments(thispackage.Error, TypeError):
फिर, मैं raise WrongNumberOfArguments
चाहते जब मैं ऐसी समस्या स्थिति का पता लगाने के लिए होने पसंद है।
इस तरह, किसी भी कॉलर जो इस पैकेज से अवगत है उसे thispackage.Error
पकड़ सकता है, अगर उन्हें पैकेज के लिए विशिष्ट त्रुटि से निपटने की ज़रूरत है, जबकि अन्य कॉलर्स (संभावित रूप से कॉल चेन में उच्चतर) कॉल अभी भी अधिक सामान्य TypeError
पकड़ लेते हैं किसी भी त्रुटि से निपटने के लिए "फ़ंक्शन कॉल में उपयोग किए गए तर्कों की गलत संख्या"।
मैं एक विशिष्ट बनाउंगा। आप इसे पकड़ने और है कि विशिष्ट अपवाद के साथ सौदा कर सकते हैं क्योंकि यह एक विशेष परिस्थिति है कि आप :)
बनाया है (जैसा कि आप टिप्पणियों में से एक में कहते हैं) है कि यह एक प्रोग्रामर त्रुटि है, तो आप AssertionError बढ़ा सकते हैं है:
def two(**kwargs):
assert len(kwargs) == 2, "Please only provide two args"
बीटीडब्ल्यू, यदि आपके पास केवल तीन नामांकित तर्क हैं, ** kwargs ऐसा करने का एक अजीब तरीका प्रतीत होता है। अधिक प्राकृतिक हो सकता है:
def two(a=None, b=None, c=None):
pass
मैं एक ValueError, या उसके एक उपवर्ग का प्रयोग करेंगे: "उठाया जब एक अंतर्निहित ऑपरेशन या समारोह एक तर्क सही प्रकार लेकिन एक अनुचित मूल्य होता है प्राप्त करता है, और स्थिति है इंडेक्स एरर जैसे अधिक सटीक अपवाद द्वारा वर्णित नहीं है। "
वास्तव में 2 की आवश्यकता होने पर 3 या 1 मान पास करना तकनीकी रूप से एक अनुचित मूल्य होगा यदि आप सभी तर्कों को एक ही टुपल मानते हैं ... कम से कम मेरी राय में! :)
क्यों नहीं पाइथन करता है?
>>> abs(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: abs() takes exactly one argument (3 given)
मैं एक कस्टम अपवाद की अनुशंसा करता हूं। इस तरह:
class NeedExactlyTwo(ValueError):
pass
फिर आप अपने कोड में raise NeedExactlyTwo
कर सकते हैं।
इसे अपने फ़ंक्शन के लिए डॉकस्ट्रिंग में दस्तावेज़ित करना सुनिश्चित करें।
- 1. जावा प्रतिबिंब त्रुटि: तर्कों की गलत संख्या
- 2. तर्कों की परिवर्तनीय संख्या
- 3. ArgumentError "तर्कों की गलत संख्या" जब दौर का उपयोग कर
- 4. तर्कों की गलत संख्या: कॉल-इंटरैक्टिवली-पी, 1
- 5. ArgumentError: तर्कों की गलत संख्या (2 के लिए 1)
- 6. इन चींटी/जेवीएम तर्कों में क्या गलत है?
- 7. फ़ंक्शन तर्कों की परिवर्तनीय संख्या Lua 5.1
- 8. अपवाद के तर्कों में जेनिक्स का उपयोग
- 9. BOOST_FUSION_ADAPT_STRUCT तर्कों की सही संख्या नहीं लेता
- 10. argparse: तर्कों की अनिर्धारित संख्या प्राप्त करें
- 11. PHP फ़ंक्शंस - तर्कों की अधिकतम संख्या
- 12. मॉकिटो गलत तर्कों के बारे में शिकायत करता है
- 13. बैश तर्कों की अधिकतम संख्या! = अधिकतम संख्या सीपी तर्क?
- 14. क्या मैं डिफ़ॉल्ट तर्कों का गलत इस्तेमाल कर रहा हूं?
- 15. क्या किसी फ़ंक्शन में तर्कों की एक चर संख्या पारित की जा सकती है?
- 16. Emacs: मेरे फ़ंक्शन को कॉल करने का प्रयास करते समय तर्कों की गलत संख्या त्रुटि
- 17. अपने तर्कों
- 18. पीएल/एसक्यूएल संग्रहीत प्रक्रिया में तर्कों की परिवर्तनीय संख्या
- 19. jQuery। जब तर्कों की परिवर्तनीय संख्या के साथ समस्या निवारण
- 20. यदि वैरिएबल वैश्विक है तो आपको जावास्क्रिप्ट में स्वयं निष्पादन फ़ंक्शन में तर्कों को पारित करने की आवश्यकता क्यों है?
- 21. cmdline तर्कों का विश्लेषण =
- 22. तर्कों में tuples का विस्तार
- 23. वैकल्पिक तर्कों का प्रचार
- 24. तर्कों की परिवर्तनीय संख्या के साथ पायथन एक्सटेंशन मॉड्यूल
- 25. मुक्केबाजी के बिना मूल्य-प्रकार के तर्कों की परिवर्तनीय संख्या?
- 26. नेस्टेड_फॉर्म मणि के साथ त्रुटि: तर्कों की गलत संख्या (3 के लिए 4)
- 27. क्या printf तर्कों में प्रकारों को बढ़ावा देना खतरनाक है?
- 28. क्या सी ++ 11 std :: फ़ंक्शन किसी फ़ंक्शन पॉइंटर के तर्कों की संख्या को सीमित करता है?
- 29. जेड END_BEGIN_ARG_INFO_EX तर्कों की नियंत्रण संख्या को कैसे PHP एक्सटेंशन में पास किया गया है?
- 30. `std :: function` के तर्कों की संख्या कैसे प्राप्त करें?
यह कई विरासत का उपयोग करने का एक सुंदर उदाहरण है। धन्यवाद। –