Python 3.7 - warnings

चेतावनी - चेतावनी नियंत्रण




python

चेतावनी - चेतावनी नियंत्रण

स्रोत कोड: Lib/warnings.py

चेतावनी संदेश आमतौर पर उन स्थितियों में जारी किए जाते हैं जहां किसी कार्यक्रम में किसी स्थिति के उपयोगकर्ता को सचेत करना उपयोगी होता है, जहां वह स्थिति (सामान्य रूप से) अपवाद को छोड़कर और कार्यक्रम को समाप्त करने के लिए वारंट नहीं करती है। उदाहरण के लिए, जब कोई प्रोग्राम अप्रचलित मॉड्यूल का उपयोग करता है, तो वह चेतावनी जारी कर सकता है।

पायथन प्रोग्रामर इस मॉड्यूल में परिभाषित warn() फ़ंक्शन को कॉल करके चेतावनी जारी करते हैं। (सी प्रोग्रामर PyErr_WarnEx() ; विवरण के लिए अपवाद हैंडलिंग देखें) का उपयोग करते हैं।

चेतावनी संदेश आमतौर पर sys.stderr को लिखे sys.stderr , लेकिन सभी चेतावनियों को अनदेखा करने से लेकर अपवादों में बदलने तक, उनके स्वभाव को लचीले ढंग से बदला जा सकता है। चेतावनी की चेतावनी चेतावनी श्रेणी (नीचे देखें), चेतावनी संदेश के पाठ और स्रोत स्थान के आधार पर भिन्न हो सकती है जहां इसे जारी किया गया है। समान स्रोत स्थान के लिए किसी विशेष चेतावनी की पुनरावृत्ति आमतौर पर दबा दी जाती है।

चेतावनी नियंत्रण में दो चरण होते हैं: पहला, हर बार चेतावनी जारी किए जाने के बाद, एक निर्धारण किया जाता है कि क्या संदेश जारी किया जाना चाहिए या नहीं; अगला, यदि कोई संदेश जारी किया जाना है, तो यह एक उपयोगकर्ता-स्थाई हुक का उपयोग करके स्वरूपित और मुद्रित किया जाता है।

चेतावनी संदेश जारी करने के लिए निर्धारण को चेतावनी फ़िल्टर द्वारा नियंत्रित किया जाता है, जो कि नियमों और क्रियाओं के मिलान का एक क्रम है। filterwarnings() को कॉल करके नियमों को फ़िल्टर में जोड़ा जा सकता है और रीसेट डिफ़ॉल्ट resetwarnings() कॉल करके इसकी डिफ़ॉल्ट स्थिति पर रीसेट किया जा सकता है।

चेतावनी संदेशों की छपाई showwarning() कहकर की showwarning() , जिसे ओवरराइड किया जा सकता है; इस फ़ंक्शन का डिफ़ॉल्ट कार्यान्वयन formatwarning() को कॉल करके संदेश को formatwarning() करता है, जो कि कस्टम कार्यान्वयन द्वारा उपयोग के लिए भी उपलब्ध है।

यह भी देखें

logging.captureWarnings() आपको मानक लॉगिंग बुनियादी ढांचे के साथ सभी चेतावनियों को संभालने की अनुमति देता है।

चेतावनी श्रेणियाँ

कई अंतर्निहित अपवाद हैं जो चेतावनी श्रेणियों का प्रतिनिधित्व करते हैं। यह वर्गीकरण चेतावनी के समूहों को फ़िल्टर करने में सक्षम होने के लिए उपयोगी है।

हालांकि ये तकनीकी रूप से निर्मित अपवाद हैं , इन्हें यहाँ प्रलेखित किया गया है, क्योंकि वैचारिक रूप से ये चेतावनी तंत्र से संबंधित हैं।

उपयोगकर्ता कोड मानक चेतावनी श्रेणियों में से एक को उपवर्ग करके अतिरिक्त चेतावनी श्रेणियों को परिभाषित कर सकता है। चेतावनी श्रेणी हमेशा Warning वर्ग का उपवर्ग होनी चाहिए।

वर्तमान में निम्न चेतावनियाँ श्रेणी की कक्षाएं परिभाषित की गई हैं:

कक्षा विवरण
Warning यह सभी चेतावनी श्रेणी वर्गों का आधार वर्ग है। यह Exception का एक उपवर्ग है।
UserWarning warn() लिए डिफ़ॉल्ट श्रेणी warn()
DeprecationWarning उन चेतावनियों के बारे में चेतावनियों के लिए आधार श्रेणी जब उन चेतावनियों को अन्य पायथन डेवलपर्स के लिए अभिप्रेत है (डिफ़ॉल्ट रूप से अनदेखा किया जाता है, जब तक कि __main__ में कोड द्वारा ट्रिगर नहीं किया जाता है)।
SyntaxWarning संदिग्ध वाक्यात्मक विशेषताओं के बारे में चेतावनी के लिए आधार श्रेणी।
RuntimeWarning संदिग्ध रनटाइम सुविधाओं के बारे में चेतावनी के लिए आधार श्रेणी।
FutureWarning उन चेतावनियों के बारे में चेतावनियों के लिए आधार श्रेणी जब उन चेतावनियों को उन अनुप्रयोगों के अंतिम उपयोगकर्ताओं के लिए अभिप्रेत है जिन्हें पायथन में लिखा गया है।
PendingDeprecationWarning उन सुविधाओं के बारे में चेतावनियों के लिए आधार श्रेणी जो भविष्य में अपदस्थ (डिफ़ॉल्ट रूप से अनदेखा) हो जाएंगी।
ImportWarning मॉड्यूल आयात करने की प्रक्रिया के दौरान शुरू होने वाली चेतावनियों के लिए आधार श्रेणी (डिफ़ॉल्ट रूप से अनदेखा)।
UnicodeWarning यूनिकोड से संबंधित चेतावनियों के लिए आधार श्रेणी।
BytesWarning bytes और bytearray से संबंधित चेतावनियों के लिए आधार श्रेणी।
ResourceWarning संसाधन उपयोग से संबंधित चेतावनियों के लिए आधार श्रेणी।

संस्करण 3.7 में परिवर्तित किया गया: पहले FutureWarning और FutureWarning को इस आधार पर प्रतिष्ठित किया गया था कि क्या किसी फीचर को पूरी तरह से हटाया जा रहा है या उसके व्यवहार को बदल रहा है। वे अब अपने इच्छित श्रोताओं और डिफ़ॉल्ट चेतावनी फिल्टर द्वारा नियंत्रित किए जाने के तरीके के आधार पर प्रतिष्ठित हैं।

चेतावनियाँ फ़िल्टर

चेतावनियों को नियंत्रित करता है कि क्या चेतावनियों को अनदेखा, प्रदर्शित, या त्रुटियों में बदल दिया गया है (अपवाद को बढ़ाते हुए)।

वैचारिक रूप से, चेतावनी फ़िल्टर फिल्टर विनिर्देशों की एक क्रमबद्ध सूची रखता है; किसी विशिष्ट चेतावनी को मिलान में सूची के प्रत्येक फ़िल्टर विनिर्देश के विरुद्ध मिलान होने तक मिलाया जाता है; फ़िल्टर मैच के फैलाव को निर्धारित करता है। प्रत्येक प्रविष्टि फॉर्म ( क्रिया , संदेश , श्रेणी , मॉड्यूल , लिनीनो ) का एक टपल है, जहां:

  • कार्रवाई निम्नलिखित तारों में से एक है:

    मूल्य स्वभाव
    "default" प्रत्येक स्थान (मॉड्यूल + लाइन नंबर) के लिए मिलान चेतावनी की पहली घटना को प्रिंट करें जहां चेतावनी जारी की गई है
    "error" अपवादों में मिलान चेतावनी को चालू करें
    "ignore" मिलान चेतावनी कभी न छापें
    "always" हमेशा मिलान चेतावनी मुद्रित करें
    "module" प्रत्येक मॉड्यूल के लिए जहां चेतावनी जारी की जाती है (पंक्ति संख्या की परवाह किए बिना) चेतावनी के मिलान की पहली घटना को प्रिंट करें
    "once" स्थान की परवाह किए बिना केवल चेतावनियों की पहली घटना को प्रिंट करें
  • संदेश एक स्ट्रिंग है जिसमें एक नियमित अभिव्यक्ति है जिसे चेतावनी संदेश की शुरुआत से मेल खाना चाहिए। अभिव्यक्ति हमेशा केस-असंवेदनशील होने के लिए संकलित है।
  • श्रेणी एक वर्ग ( Warning का एक उपवर्ग) है जिसमें चेतावनी श्रेणी को मिलान करने के लिए उपवर्ग होना चाहिए।
  • मॉड्यूल एक स्ट्रिंग है जिसमें एक नियमित अभिव्यक्ति होती है जो मॉड्यूल नाम से मेल खाना चाहिए। अभिव्यक्ति केस-संवेदी होने के लिए संकलित है।
  • लिनीनो एक पूर्णांक है कि लाइन नंबर जहां चेतावनी हुई है, या सभी पंक्ति संख्याओं के मिलान के लिए 0 होना चाहिए।

चूंकि Warning वर्ग अंतर्निहित Exception वर्ग से लिया गया है, इसलिए चेतावनी को एक त्रुटि में बदलने के लिए हम बस category(message) बढ़ाते हैं।

यदि कोई चेतावनी दी गई है और किसी पंजीकृत फ़िल्टर से मेल नहीं खाती है, तो "डिफ़ॉल्ट" कार्रवाई लागू की जाती है (इसलिए इसका नाम)।

वार्निंग फिल्टर्स का वर्णन

चेतावनियों को प्रारंभिक फ़िल्टर द्वारा -W विकल्प पायथन इंटरप्रेटर कमांड लाइन और PYTHONWARNINGS पर्यावरण चर पर पारित किया गया है। दुभाषिया sys.warnoptions में व्याख्या के बिना सभी आपूर्ति की गई प्रविष्टियों के लिए तर्कों को बचाता है; warnings मॉड्यूल तब पार्स करता है जब इसे पहली बार आयात किया जाता है (अमान्य विकल्पों को नजरअंदाज कर दिया जाता है, संदेश को sys.stderr पर sys.stderr करने के sys.stderr )।

अलग-अलग चेतावनियां फिल्टर कॉलोन द्वारा अलग किए गए क्षेत्रों के अनुक्रम के रूप में निर्दिष्ट की जाती हैं:

action:message:category:module:line

इनमें से प्रत्येक क्षेत्र का अर्थ द वॉर्निंग फ़िल्टर में वर्णित है। जब एक ही लाइन ( PYTHONWARNINGS ) पर कई फिल्टर सूचीबद्ध होते हैं, तो व्यक्तिगत फ़िल्टर अल्पविराम से अलग हो जाते हैं, और बाद में सूचीबद्ध फ़िल्टर उनसे पहले सूचीबद्ध लोगों पर वरीयता लेते हैं (जैसा कि वे बाएं-दाएं लागू होते हैं, और सबसे हाल ही में लागू किए गए फ़िल्टर पहले वाले से अधिक पूर्वता लेते हैं)।

आमतौर पर उपयोग किए जाने वाले चेतावनी फिल्टर या तो सभी चेतावनियों पर लागू होते हैं, किसी विशेष श्रेणी में चेतावनी, या विशेष मॉड्यूल या पैकेज द्वारा उठाए गए चेतावनियों पर। कुछ उदाहरण:

default                      # Show all warnings (even those ignored by default)
ignore                       # Ignore all warnings
error                        # Convert all warnings to errors
error::ResourceWarning       # Treat ResourceWarning messages as errors
default::DeprecationWarning  # Show DeprecationWarning messages
ignore,default:::mymodule    # Only report warnings triggered by "mymodule"
error:::mymodule[.*]         # Convert warnings to errors in "mymodule"
                             # and any subpackages of "mymodule"

डिफ़ॉल्ट चेतावनी फ़िल्टर

डिफ़ॉल्ट रूप से, पायथन कई चेतावनी फिल्टर स्थापित करता है, जिसे -W कमांड-लाइन विकल्प, PYTHONWARNINGS पर्यावरण चर द्वारा फ़िल्टर किया जा सकता है और filterwarnings() करने के लिए कॉल किया जा filterwarnings()

नियमित रिलीज़ बिल्ड में, डिफ़ॉल्ट चेतावनी फ़िल्टर में निम्न प्रविष्टियाँ होती हैं (पूर्ववर्ती क्रम में):

default::DeprecationWarning:__main__
ignore::DeprecationWarning
ignore::PendingDeprecationWarning
ignore::ImportWarning
ignore::ResourceWarning

डीबग बिल्ड में, डिफ़ॉल्ट चेतावनी फ़िल्टर की सूची रिक्त है।

संस्करण 3.2 में परिवर्तित: PendingDeprecationWarning अलावा अब डिफ़ॉल्ट रूप से DeprecationWarning को अनदेखा कर दिया गया है।

संस्करण 3.7 में परिवर्तित: __main__ में कोड द्वारा सीधे ट्रिगर किए जाने पर एक बार फिर __main__ को डिफ़ॉल्ट रूप से दिखाया जाता है।

संस्करण 3.7 में परिवर्तित: BytesWarning अब डिफ़ॉल्ट फ़िल्टर सूची में दिखाई नहीं देता है और इसके बजाय sys.warnoptions माध्यम से कॉन्फ़िगर किया जाता है जब -b दो बार निर्दिष्ट किया जाता है।

डिफ़ॉल्ट फ़िल्टर को ओवरराइड करना

पायथन में लिखे गए एप्लिकेशन के डेवलपर्स डिफ़ॉल्ट रूप से अपने उपयोगकर्ताओं से सभी पायथन स्तर की चेतावनियों को छिपाने की इच्छा कर सकते हैं, और केवल परीक्षण चलाने या अन्यथा आवेदन पर काम करते समय उन्हें प्रदर्शित कर सकते हैं। sys.warnoptions लिए फ़िल्टर कॉन्फ़िगरेशन को पास करने के लिए उपयोग की जाने वाली sys.warnoptions विशेषता को संकेत के रूप में उपयोग किया जा सकता है कि क्या चेतावनी अक्षम होनी चाहिए या नहीं:

import sys

if not sys.warnoptions:
    import warnings
    warnings.simplefilter("ignore")

पायथन कोड के लिए परीक्षण धावकों के डेवलपर्स को सलाह दी जाती है कि वे यह सुनिश्चित करें कि कोड के तहत डिफ़ॉल्ट रूप से सभी चेतावनी प्रदर्शित की जाती हैं, कोड का उपयोग करके:

import sys

if not sys.warnoptions:
    import os, warnings
    warnings.simplefilter("default") # Change the filter in this process
    os.environ["PYTHONWARNINGS"] = "default" # Also affect subprocesses

अंत में, __main__ अलावा किसी नेमस्पेस में उपयोगकर्ता कोड को चलाने वाले इंटरैक्टिव गोले के डेवलपर्स को यह सुनिश्चित करने की सलाह दी जाती है कि __main__ संदेशों को डिफ़ॉल्ट रूप से दिखाई दे, कोड की तरह निम्न का उपयोग करके (जहां user_ns मॉड्यूल को कोड निष्पादित करने के लिए उपयोग किया जाता है):

import warnings
warnings.filterwarnings("default", category=DeprecationWarning,
                                   module=user_ns.get("__name__"))

अस्थायी रूप से दमनकारी चेतावनी

यदि आप उस कोड का उपयोग कर रहे हैं जिसे आप जानते हैं कि एक चेतावनी बढ़ाएगा, जैसे कि एक पदावनत समारोह, लेकिन चेतावनी को देखना नहीं चाहता (यहां तक ​​कि जब चेतावनियों को कमांड लाइन के माध्यम से स्पष्ट रूप से कॉन्फ़िगर किया गया है), तो यह चेतावनी का उपयोग करना संभव है catch_warnings संदर्भ प्रबंधक:

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

संदर्भ प्रबंधक के भीतर सभी चेतावनियों को केवल नजरअंदाज कर दिया जाएगा। यह आपको ज्ञात-पदावनत कोड का उपयोग करने की अनुमति देता है, जबकि चेतावनी को देखने के लिए अन्य कोड के लिए चेतावनी को दबाए बिना नहीं है, जो कि पदावनत कोड के इसके उपयोग के बारे में पता नहीं हो सकता है। नोट: यह केवल एकल-थ्रेडेड अनुप्रयोग में गारंटी दी जा सकती है। यदि दो या अधिक थ्रेड एक ही समय में catch_warnings संदर्भ प्रबंधक का उपयोग करते हैं, तो व्यवहार अपरिभाषित है।

परीक्षण चेतावनी

कोड द्वारा उठाए गए चेतावनियों का परीक्षण करने के लिए, catch_warnings संदर्भ प्रबंधक का उपयोग करें। इसके साथ आप अस्थायी रूप से अपने परीक्षण को सुविधाजनक बनाने के लिए चेतावनियों को फ़िल्टर कर सकते हैं। उदाहरण के लिए, जांच के लिए सभी उठाए गए चेतावनियों को पकड़ने के लिए निम्न कार्य करें:

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings(record=True) as w:
    # Cause all warnings to always be triggered.
    warnings.simplefilter("always")
    # Trigger a warning.
    fxn()
    # Verify some things
    assert len(w) == 1
    assert issubclass(w[-1].category, DeprecationWarning)
    assert "deprecated" in str(w[-1].message)

always बजाय error उपयोग से सभी चेतावनी अपवाद हो सकती है। एक बात का ध्यान रखें कि यदि एक once / default नियम के कारण पहले से ही चेतावनी जारी कर दी गई है, तो कोई बात नहीं है कि फ़िल्टर सेट किए गए हैं चेतावनी को फिर से नहीं देखा जाएगा जब तक कि चेतावनी से संबंधित चेतावनी रजिस्ट्री को साफ़ नहीं किया गया हो।

एक बार जब संदर्भ प्रबंधक बाहर निकलता है, तो चेतावनी फ़िल्टर को उसके राज्य में पुनर्स्थापित किया जाता है जब संदर्भ दर्ज किया गया था। यह परीक्षणों के बीच अप्रत्याशित तरीके से चेतावनियों के फिल्टर को बदलने से रोकता है और परीक्षण परिणामों को अनिश्चित बनाता है। मॉड्यूल में showwarning() फ़ंक्शन को इसके मूल मूल्य पर भी पुनर्स्थापित किया जाता है। नोट: यह केवल एकल-थ्रेडेड अनुप्रयोग में गारंटी दी जा सकती है। यदि दो या अधिक थ्रेड एक ही समय में catch_warnings संदर्भ प्रबंधक का उपयोग करते हैं, तो व्यवहार अपरिभाषित है।

एक ही तरह की चेतावनी को बढ़ाने वाले कई ऑपरेशनों का परीक्षण करते समय, उन्हें इस तरीके से जांचना महत्वपूर्ण होता है जो पुष्टि करता है कि प्रत्येक ऑपरेशन एक नई चेतावनी उठा रहा है (उदाहरण के लिए अपवाद के रूप में उठाए जाने की चेतावनी सेट करें और संचालन अपवादों को बढ़ाएं, जाँच लें कि लंबाई प्रत्येक ऑपरेशन के बाद चेतावनी सूची में वृद्धि जारी है, या फिर प्रत्येक नए ऑपरेशन से पहले चेतावनी सूची से पिछली प्रविष्टियों को हटा दें)।

निर्भरता के नए संस्करणों के लिए अद्यतन कोड

चेतावनी श्रेणियां जो मुख्य रूप से पायथन डेवलपर्स के लिए रुचि रखते हैं (बजाय पायथन में लिखे गए अनुप्रयोगों के अंत उपयोगकर्ताओं) को डिफ़ॉल्ट रूप से अनदेखा किया जाता है।

विशेष रूप से, इस "डिफ़ॉल्ट रूप से नजरअंदाज की गई" सूची में __main__ ( __main__ को छोड़कर प्रत्येक मॉड्यूल के लिए) शामिल है, जिसका अर्थ है कि डेवलपर्स को भविष्य में ब्रेकिंग एपीआई परिवर्तनों की समय-समय पर सूचनाएं प्राप्त करने के लिए दिखाई गई अनदेखी के साथ अपने कोड का परीक्षण करना सुनिश्चित करना चाहिए (चाहे में मानक पुस्तकालय या तीसरे पक्ष के पैकेज)।

आदर्श मामले में, कोड में एक उपयुक्त परीक्षण सूट होगा, और परीक्षण चलाने वाले परीक्षण को चलाने के दौरान सभी चेतावनियों को सक्षम करने का परीक्षण करेगा।

कम आदर्श मामलों में, अनुप्रयोगों को गुजर- -W से -W गए इंटरफेस के उपयोग के लिए जाँच किया जा सकता है- -W दुभाषिया (यह -W default लिए शॉर्टहैंड है) या वातावरण में PYTHONWARNINGS=default सेटिंग करना। यह उन सभी चेतावनियों के लिए डिफ़ॉल्ट हैंडलिंग सक्षम करता है, जिनमें डिफ़ॉल्ट रूप से अनदेखा किया गया है। सामना की चेतावनियों के लिए क्या कार्रवाई की जाती है इसे बदलने के लिए आप क्या तर्क बदल सकते हैं -W (जैसे -W error )। क्या संभव है पर अधिक जानकारी के लिए -W झंडा देखें।

उपलब्ध कार्य

warnings.warn(message, category=None, stacklevel=1, source=None)

एक चेतावनी जारी करें, या शायद इसे अनदेखा करें या एक अपवाद बढ़ाएं। श्रेणी तर्क, यदि दिया गया है, तो चेतावनी श्रेणी का वर्ग होना चाहिए (ऊपर देखें); यह UserWarning लिए डिफ़ॉल्ट है। वैकल्पिक रूप से संदेश एक Warning उदाहरण हो सकता है, जिसमें मामले की श्रेणी को अनदेखा किया जाएगा और message.__class__ का उपयोग किया जाएगा। इस स्थिति में संदेश पाठ str(message) । यह फ़ंक्शन एक अपवाद उठाता है यदि जारी की गई विशेष चेतावनी चेतावनी फ़िल्टर द्वारा एक त्रुटि में बदल जाती है। स्टैकलवेल तर्क का उपयोग पायथन में लिखे आवरण कार्यों द्वारा किया जा सकता है, जैसे:

def deprecation(message):
    warnings.warn(message, DeprecationWarning, stacklevel=2)

यह चेतावनी को deprecation() के स्रोत के बजाय स्वयं ( deprecation() के बाद से deprecation() को संदर्भित करता है (क्योंकि बाद वाला चेतावनी संदेश के उद्देश्य को हरा देगा)।

स्रोत , अगर आपूर्ति की जाती है, तो नष्ट की गई वस्तु है जो रिसोर्सवार्किंग उत्सर्जित करती है।

संस्करण 3.6 में परिवर्तित: स्रोत पैरामीटर जोड़ा गया।

warnings.warn_explicit(message, category, filename, lineno, module=None, registry=None, module_globals=None, source=None)

यह warn() , संदेश, श्रेणी, फ़ाइल नाम और लाइन नंबर, और वैकल्पिक रूप से मॉड्यूल का नाम और रजिस्ट्री (जो मॉड्यूल का __warningregistry__ शब्दकोश होना चाहिए warn() में गुजर रहा है, warn() की कार्यक्षमता के लिए एक निम्न-स्तरीय इंटरफ़ेस है। मॉड्यूल नाम .py साथ फ़ाइल नाम के लिए डिफ़ॉल्ट है। यदि कोई रजिस्ट्री पारित नहीं होती है, तो चेतावनी को कभी भी दबाया नहीं जाता है। संदेश को एक स्ट्रिंग होना चाहिए और श्रेणी को Warning उपवर्ग या संदेश Warning उदाहरण हो सकता है, जिसमें मामले की श्रेणी को अनदेखा किया जाएगा।

मॉड्यूल_ग्लोबल्स , यदि आपूर्ति की जाती है, तो उस कोड के उपयोग में वैश्विक नाम स्थान होना चाहिए जिसके लिए चेतावनी जारी की गई है। (यह तर्क zipfiles या अन्य गैर-फाइल सिस्टम आयात स्रोतों में पाए जाने वाले मॉड्यूल के लिए स्रोत प्रदर्शित करने के लिए उपयोग किया जाता है)।

स्रोत , अगर आपूर्ति की जाती है, तो नष्ट की गई वस्तु है जो रिसोर्सवार्किंग उत्सर्जित करती है।

संस्करण 3.6 में बदला गया: स्रोत पैरामीटर जोड़ें।

warnings.showwarning(message, category, filename, lineno, file=None, line=None)

एक फ़ाइल के लिए एक चेतावनी लिखें। डिफ़ॉल्ट कार्यान्वयन formatwarning(message, category, filename, lineno, line) कॉल formatwarning(message, category, filename, lineno, line) और परिणामी स्ट्रिंग को फाइल करने के लिए लिखता है, जो sys.stderr को sys.stderr । आप warnings.showwarning को बताकर इस फ़ंक्शन को किसी भी कॉल करने योग्य के साथ बदल सकते हैं। लाइन चेतावनी संदेश में शामिल किए जाने वाले स्रोत कोड की एक पंक्ति है; यदि लाइन की आपूर्ति नहीं की जाती है, तो showwarning() फ़ाइल नाम और लाइनो द्वारा निर्दिष्ट लाइन को पढ़ने की कोशिश करेगा।

warnings.formatwarning(message, category, filename, lineno, line=None)

मानक तरीके से चेतावनी को प्रारूपित करें। यह एक स्ट्रिंग देता है जिसमें एम्बेडेड newlines और एक newline में समाप्त होता है। लाइन चेतावनी संदेश में शामिल किए जाने वाले स्रोत कोड की एक पंक्ति है; यदि लाइन की आपूर्ति नहीं की जाती है, तो formatwarning() फ़ाइल नाम और लाइनो द्वारा निर्दिष्ट लाइन को पढ़ने की कोशिश करेगा।

warnings.filterwarnings(action, message='', category=Warning, module='', lineno=0, append=False)

चेतावनी फ़िल्टर विनिर्देशों की सूची में एक प्रविष्टि डालें। प्रवेश डिफ़ॉल्ट रूप से सामने की ओर डाला जाता है; यदि परिशिष्ट सही है, तो इसे अंत में डाला जाता है। यह तर्कों के प्रकारों की जांच करता है, संदेश और मॉड्यूल नियमित अभिव्यक्तियों को संकलित करता है, और उन्हें चेतावनी फिल्टर की सूची में एक टपल के रूप में सम्मिलित करता है। सूची के सामने प्रविष्टियाँ प्रविष्टि को सूची में बाद में ओवरराइड करती हैं, यदि दोनों एक विशेष चेतावनी से मेल खाती हैं। सब कुछ से मेल खाने वाले मान के लिए डिफ़ॉल्ट रूप से दिए गए तर्क।

warnings.simplefilter(action, category=Warning, lineno=0, append=False)

चेतावनियों को फ़िल्टर विशिष्टताओं की सूची में एक सरल प्रविष्टि डालें। फंक्शन पैरामीटर्स का अर्थ filterwarnings() , लेकिन नियमित एक्सप्रेशंस की आवश्यकता नहीं है क्योंकि डाला गया फ़िल्टर हमेशा किसी भी मॉड्यूल में किसी भी संदेश से तब तक मेल खाता है जब तक कि श्रेणी और लाइन नंबर का मिलान न हो जाए।

warnings.resetwarnings()

चेतावनियाँ फ़िल्टर रीसेट करें। यह filterwarnings() लिए पिछली सभी कॉलों के प्रभाव को शामिल करता है, जिसमें -W कमांड लाइन विकल्प और simplefilter() को कॉल शामिल हैं।

उपलब्ध संदर्भ प्रबंधक

class warnings.catch_warnings(*, record=False, module=None)

एक संदर्भ प्रबंधक, जो कॉपी करता है और बाहर निकलने पर, चेतावनी फ़िल्टर और showwarning() फ़ंक्शन को पुनर्स्थापित करता है। यदि रिकॉर्ड तर्क False (डिफ़ॉल्ट) संदर्भ प्रबंधक प्रविष्टि पर None लौटाता है। यदि रिकॉर्ड True , तो एक सूची दी जाती है जो उत्तरोत्तर showwarning() फ़ंक्शन (जो sys.stdout को आउटपुट भी दबाती है showwarning() द्वारा देखी गई वस्तुओं के साथ उत्तरोत्तर आबादी है। सूची की प्रत्येक वस्तु में showwarning() के तर्क के समान गुण हैं।

मॉड्यूल तर्क एक मॉड्यूल लेता है जिसका उपयोग मॉड्यूल के बजाय किया जाएगा जब आप warnings आयात करते हैं जिसका फ़िल्टर संरक्षित होगा। यह तर्क मुख्य रूप से warnings मॉड्यूल के परीक्षण के लिए ही मौजूद है।

ध्यान दें

catch_warnings प्रबंधक प्रतिस्थापित करके काम करता है और फिर बाद में मॉड्यूल की showwarning() फ़ंक्शन और फ़िल्टर विनिर्देशों की आंतरिक सूची को पुनर्स्थापित करता है। इसका मतलब है कि संदर्भ प्रबंधक वैश्विक स्थिति को संशोधित कर रहा है और इसलिए थ्रेड-सुरक्षित नहीं है।