उनके बीच क्या अंतर है warnings.warn()और logging.warn()वे क्या करते हैं और उनका उपयोग कैसे किया जाना चाहिए?
उनके बीच क्या अंतर है warnings.warn()और logging.warn()वे क्या करते हैं और उनका उपयोग कैसे किया जाना चाहिए?
जवाबों:
एक अपवाद को उठाता है जिसे पकड़ा जा सकता है या वांछित के रूप में अनदेखा किया जा सकता है, और दूसरा वैकल्पिक रूप से वर्तमान लॉग स्तर के आधार पर लॉग में प्रवेश करता है। एक का उपयोग तब किया जाना चाहिए जब कोई कोड में विभिन्न चीजों के बारे में चेतावनी दे रहा हो, और दूसरे का उपयोग लॉगिंग करते समय किया जाना चाहिए।
logging.captureWarnings())। चेतावनी संदेश प्रति डिफ़ॉल्ट केवल एक बार दिखाया जाता है, जैसा कि @cxrodgers ने उपयोगकर्ता को अपना कोड बदलने के लिए बताने के लिए समझाया। दूसरे पर प्रवेश करना और सभी चेतावनियों को दर्ज करना, हालांकि, विस्तार से दिखाया जा सकता है। `-W त्रुटि 'का उपयोग करके अपवादों को चेतावनी दी जा सकती है।
warningsया logging?
मैं दूसरे उत्तर से सहमत हूं - loggingलॉगिंग के लिए है और warningचेतावनी के लिए है - लेकिन मैं और अधिक विवरण जोड़ना चाहूंगा।
यहां एक ट्यूटोरियल-स्टाइल HOWTO है जो आपको loggingमॉड्यूल का उपयोग करने के चरणों के माध्यम से ले जा रहा है ।
https://docs.python.org/3/howto/log.html
यह सीधे आपके प्रश्न का उत्तर देता है:
लाइब्रेरी कोड में चेतावनियाँ .warn () यदि समस्या से बचने योग्य है और चेतावनी को खत्म करने के लिए क्लाइंट एप्लिकेशन को संशोधित किया जाना चाहिए
logging.warning () अगर कुछ भी नहीं है तो क्लाइंट एप्लिकेशन स्थिति के बारे में नहीं कर सकता है, लेकिन फिर भी घटना को नोट किया जाना चाहिए
logging.warningबस WARNINGस्तर पर कुछ लॉग करता है, उसी तरह जो स्तर logging.infoपर लॉग इन करता INFOहै और स्तर logging.errorपर लॉग करता ERRORहै। इसका कोई विशेष व्यवहार नहीं है।
warnings.warnएक को उत्सर्जित करता है Warning, जिसे stderrपूरी तरह से नजरअंदाज किया जा सकता है , या एक सामान्य Exception(संभावित रूप से आपके आवेदन को दुर्घटनाग्रस्त) की तरह फेंक दिया जाता है, जो सटीक Warningउपवर्ग पर निर्भर करता है और आपने अपने चेतावनी फ़िल्टर को कैसे कॉन्फ़िगर किया है । डिफ़ॉल्ट रूप से, चेतावनी को मुद्रित stderrया अनदेखा किया जाएगा।
द्वारा उत्सर्जित चेतावनी के warnings.warnबारे में जानने के लिए अक्सर उपयोगी होते हैं, लेकिन याद रखना आसान होता है (खासकर यदि आप एक पृष्ठभूमि प्रक्रिया में पायथन प्रोग्राम चला रहे हैं और कैप्चर नहीं कर रहे हैं stderr)। इस कारण से, उन्हें लॉग इन करने में मदद मिल सकती है।
पायथन आपको ऐसा करने के लिए loggingमॉड्यूल और मॉड्यूल के बीच एक अंतर्निहित एकीकरण प्रदान करता है warnings; बस logging.captureWarnings(True)अपनी स्क्रिप्ट की शुरुआत में कॉल करें और warningsमॉड्यूल द्वारा उत्सर्जित सभी चेतावनियों को स्वचालित रूप से स्तर पर लॉग इन किया जाएगा WARNING।
आधिकारिक प्रलेखन में विहित स्पष्टीकरण के अलावा
लाइब्रेरी कोड में चेतावनियाँ .warn () यदि समस्या से बचने योग्य है और चेतावनी को खत्म करने के लिए क्लाइंट एप्लिकेशन को संशोधित किया जाना चाहिए
logging.warning () अगर कुछ भी नहीं है तो क्लाइंट एप्लिकेशन स्थिति के बारे में नहीं कर सकता है, लेकिन फिर भी घटना को नोट किया जाना चाहिए
यह भी ध्यान देने योग्य है कि, डिफ़ॉल्ट रूप warnings.warn("same message")से केवल एक बार दिखाई देगा। यह एक बड़ा ध्यान देने योग्य अंतर है। आधिकारिक डॉक्टर से उद्धृत
समान स्रोत स्थान के लिए किसी विशेष चेतावनी की पुनरावृत्ति आमतौर पर दबा दी जाती है।
>>> import warnings
>>> warnings.warn("foo")
__main__:1: UserWarning: foo
>>> warnings.warn("foo")
>>> warnings.warn("foo")
>>>
>>> import logging
>>> logging.warn("bar")
WARNING:root:bar
>>> logging.warn("bar")
WARNING:root:bar
>>> logging.warn("bar")
WARNING:root:bar
>>>
>>>
>>> warnings.warn("fur")
__main__:1: UserWarning: fur
>>> warnings.warn("fur")
>>> warnings.warn("fur")
>>>