2010-01-13 15 views
7

अजगर 2.6 में यह 2.6 से पहले अजगर कीपकड़ने चेतावनी पूर्व अजगर 2.6

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

संस्करणों का उपयोग हालांकि with का समर्थन नहीं करते द्वारा चेतावनी मॉड्यूल से चेतावनी को दबाने के लिए संभव है, इसलिए मैं अगर सोच रहा हूँ वहाँ उपर्युक्त के विकल्प जो पूर्व-2.6 संस्करणों के साथ काम करेंगे?

उत्तर

3

यह समान है:

# Save the existing list of warning filters before we modify it using simplefilter(). 
# Note: the '[:]' causes a copy of the list to be created. Without it, original_filter 
# would alias the one and only 'real' list and then we'd have nothing to restore. 
original_filters = warnings.filters[:] 

# Ignore warnings. 
warnings.simplefilter("ignore") 

try: 
    # Execute the code that presumably causes the warnings. 
    fxn() 

finally: 
    # Restore the list of warning filters. 
    warnings.filters = original_filters 

संपादित करें:try/finally के बिना, मूल चेतावनी फिल्टर पुनर्स्थापित नहीं किया जा होगा अगर FXN() एक अपवाद फेंक दिया। with कथन try/finally को इस तरह उपयोग करते समय प्रतिस्थापित करने के तरीके पर अधिक चर्चा के लिए PEP 343 देखें।

+0

धन्यवाद! क्या आप समझा सकते हैं कि यह कैसे और क्यों काम करता है? – astrofrog

+0

मॉर्गोथ: यह फ़िल्टर की एक प्रति बनाता है, उन्हें संशोधित करता है, fxn को कॉल करता है, और अंत में फ़िल्टर को मूल मान पर रीसेट करता है। 2.6 संदर्भ प्रबंधक करता है काफी सटीक वही बात। –

+0

स्पष्टीकरण के लिए धन्यवाद - कोशिश क्यों है ... आखिरकार जरूरी है? – astrofrog

-1

क्या न्यूनतम संस्करण आप अजगर 2.5 का एक विकल्प

from __future__ import with_statement 

हो सकता है का उपयोग कर समर्थन करने की आवश्यकता पर निर्भर करता है, और आप शायद क्या जॉन सुझाव पर वापस आने की आवश्यकता होगी।

+3

जैसा कि मैंने पर्स विस्लैंडर ने मुझे बताया कि जब मैंने इस उत्तर की कोशिश की (जिसे अब मैं देखता हूं मुझे हटाया नहीं जाना चाहिए), 'catch_warnings()' 2.6 में पेश किया गया था, इसलिए इस मामले में, केवल कथन के साथ मदद नहीं करता है (जब तक आप 'catch_warnings()' के कार्यान्वयन की प्रतिलिपि बनाना नहीं चाहते हैं। –

संबंधित मुद्दे