खैर, यह एक खुला प्रश्न है, और मेरे पास दो पहलू हैं जिन पर मैं स्पर्श करना चाहता हूं: जब कुछ जोड़ना हो और त्रुटि संदेश कैसे लिखना है।
उद्देश्य
इसे एक शुरुआत करने के लिए समझाने के लिए - कथन ऐसे कथन हैं जो त्रुटियों को बढ़ा सकते हैं, लेकिन आप उन्हें पकड़ नहीं पाएंगे। और उन्हें आम तौर पर नहीं उठाया जाना चाहिए, लेकिन वास्तविक जीवन में वे कभी-कभी उठते हैं। और यह एक गंभीर स्थिति है, जिसे कोड से पुनर्प्राप्त नहीं किया जा सकता है, जिसे हम 'घातक त्रुटि' कहते हैं।
इसके बाद, यह 'डिबगिंग उद्देश्यों' के लिए है, जो सही होने के साथ-साथ बहुत खारिज कर देता है। मुझे 'घोषित करने वाले आक्रमणकारी, जिन्हें कभी भी उल्लंघन नहीं करना चाहिए' बेहतर लगता है, हालांकि यह अलग-अलग शुरुआती पर अलग तरह से काम करता है ... कुछ 'बस इसे प्राप्त करते हैं', और अन्य या तो इसके लिए कोई उपयोग नहीं करते हैं, या सामान्य अपवादों को प्रतिस्थापित करते हैं, या यहां तक कि इसके साथ नियंत्रण प्रवाह।
अंदाज
पायथन में, assert
एक बयान है, एक फ़ंक्शन नहीं है! (याद assert(False, 'is true')
नहीं होगा, लेकिन उठो, रास्ते से बाहर:
वैकल्पिक 'त्रुटि संदेश' लिखने के लिए कब और कैसे?
यह एक यूनिट टेस्टिंग फ्रेमवर्क पर लागू होता है, जिसमें अक्सर कई दावे करने के लिए समर्पित तरीके होते हैं ( assertTrue(condition)
, assertFalse(condition), assertEqual(actual, expected)
आदि)। वे अक्सर दावे पर टिप्पणी करने का एक तरीका भी प्रदान करते हैं।
फेंक-दूर कोड में आप त्रुटि संदेशों के बिना कर सकते थे।
कुछ मामलों में, दावे में जोड़ने के लिए कुछ भी नहीं है:
डीईएफ़ डंप (कुछ): मुखर आइंस्टीनेंस (कुछ, Dumpable) # ...
लेकिन इसके अलावा, एक संदेश अन्य प्रोग्रामर के साथ संचार के लिए उपयोगी है (जो कभी-कभी आपके कोड के इंटरैक्टिव उपयोगकर्ता होते हैं, जैसे कि इफ्थॉन / ज्यूपिटर आदि में)।
उन्हें जानकारी दें, न कि केवल आंतरिक कार्यान्वयन विवरण लीक करें।
के बजाय:
assert meaningless_identifier <= MAGIC_NUMBER_XXX, 'meaningless_identifier is greater than MAGIC_NUMBER_XXX!!!'
लिखो:
assert meaningless_identifier > MAGIC_NUMBER_XXX, 'reactor temperature above critical threshold'
या शायद यहां तक कि:
assert meaningless_identifier > MAGIC_NUMBER_XXX, f'reactor temperature({meaningless_identifier }) above critical threshold ({MAGIC_NUMBER_XXX})'
मुझे पता है, मुझे पता है - यह एक स्थिर दावे के लिए मामला नहीं है, लेकिन मैं संदेश के सूचनात्मक मूल्य को इंगित करना चाहता हूं।
नकारात्मक या सकारात्मक संदेश?
यह विवादास्पद हो सकता है, लेकिन मुझे इस तरह की बातें पढ़ने के लिए दर्द होता है:
assert a == b, 'a is not equal to b'
ये दो विरोधाभासी बातें हैं जो प्रत्येक अभिभावक के बगल में लिखी गई हैं। इसलिए जब भी मुझे कोडबेस पर कोई प्रभाव पड़ता है, तो मैं 'वी' और 'चाहिए' जैसी अतिरिक्त क्रियाओं का उपयोग करके यह निर्दिष्ट करने के लिए धक्का देता हूं कि हम क्या चाहते हैं।
a == b, 'a बराबर होना चाहिए b'
फिर, प्राप्त AssertionError: a must be equal to b
करना भी पठनीय है, और कथन कोड में तर्कसंगत लगता है। इसके अलावा, आप ट्रेसबैक (जो कभी-कभी उपलब्ध भी नहीं हो सकते हैं) को पढ़े बिना इसमें से कुछ निकाल सकते हैं।