2015-08-21 4 views
5

हम Django 1.6 से 1.7 तक अपना आवेदन अपडेट कर रहे हैं। RemovedInDjango18Warningआयात के दौरान होने वाली डिप्रेशन वॉर्निंग को कैसे फ़िल्टर करें?

वहाँ उन्हें फिल्टर करने के लिए एक रास्ता है:

हम इन संदेश का एक बहुत देखते हैं? वे आयात के दौरान उत्सर्जित हो जाते हैं।

हमने warnings.filterwarnings('ignore', '...') की कोशिश की लेकिन warnings.filterwarnings() पर कॉल करने से पहले चेतावनियां उत्सर्जित हो गईं।

आयात के दौरान होने वाली इन चेतावनियों को मैं कैसे फ़िल्टर कर सकता हूं?

+0

@ एंडी। मुझे लगता है कि यह एक अलग सवाल है। मुझे पता है कि 'चेतावनियों का उपयोग कैसे करें। फिल्टरवार्निंग्स() '। मेरी समस्या समय है: आयात के दौरान बहुत सारे संदेश उत्सर्जित होते हैं। मुझे नहीं पता कि चेतावनियों को कैसे कॉल करें। फिल्टरवार्निंग्स() जल्दी – guettli

+0

[अपने स्वयं के फ़िल्टर लिखें] के बारे में क्या है (https://docs.djangoproject.com/en/1।8/विषयों/लॉगिंग/# आईडी 5) settings.py में? – danihp

+0

@ डैनशिप AFAIK सेटिंग.py लोड होने से पहले चेतावनियां उत्सर्जित हो जाती हैं। Settings.py में एक फ़िल्टर बहुत देर हो जाएगी। – guettli

उत्तर

4

QuickFix

यह मौन करने के लिए केवल जब तुम manage.py चलाने के लिए, import sys के बाद इन लाइनों जोड़ें:

# ... 
import sys 

if not sys.warnoptions: 
    sys.warnoptions += [None] 

# ... 

आप भी अपने WSGI सर्वर (यानी अपाचे) से यह मौन करने, अद्यतन your_project/wsgi.py चाहते हैं और import os के बाद निम्न पंक्तियां जोड़ें:

# ... 
import os 
import sys 

if not sys.warnoptions: 
    sys.warnoptions += [None] 

# ... 

स्पष्टीकरण

कारण यह काम करता है की वजह से कैसे django.utils.log.configure_logging() यह संभालती है:

def configure_logging(logging_config, logging_settings): 
    if not sys.warnoptions: 
     # Route warnings through python logging 
     logging.captureWarnings(True) 
     # RemovedInNextVersionWarning is a subclass of DeprecationWarning which 
     # is hidden by default, hence we force the "default" behavior 
     warnings.simplefilter("default", RemovedInNextVersionWarning) 
    # ... 

यह जानबूझ कर जल्दी django.setup() के हिस्से के रूप बूट प्रक्रिया है, जो बताता है कि क्यों त्रुटियों इससे पहले कि आप करने में सक्षम थे उत्सर्जित कर रहे थे में कहा जाता है उन्हें ढेर के नीचे और चुप करो।

sys.warnoptions पर नया तत्व जोड़ना तर्क को छोड़कर True पर मूल्यांकन करने के लिए मजबूर करता है। only used during python startupwarnings मॉड्यूल द्वारा लोड होने पर यह हानिरहित है क्योंकि यह only used during python startup है।

RemovedInNextVersionWarningRemovedInDjango18Warning in Django 1.7 के लिए केवल एक उपनाम है। यह RemovedInDjango19Warning in 1.8 पर सेट है, और इसी तरह भविष्य के संस्करणों के लिए - इस कोड को DeprecationWarning इस प्रकार के भविष्य के सबूत होना चाहिए।


कमांड लाइन तरीकों

ध्यान दें कि sys.warnoptions सामान्य रूप से -W argument पर जब अजगर बुला आधारित अजगर स्टार्टअप के दौरान स्थापित किया जाएगा। इसलिए, जब आप dev सर्वर का उपयोग करते हैं तो चेतावनियों को चुप करने का एक आसान तरीका python -W123 manage.py runserver है। इसके लिए फाइलों में कोई संशोधन की आवश्यकता नहीं है, लेकिन परिणामस्वरूप 123 के बाद स्टार्टअप पर एक हानिकारक चेतावनी होती है, केवल एक प्लेसहोल्डर है और वैध चेतावनी कार्रवाई नहीं है। हालांकि इस सभीDeprecationWarning रों अनदेखी करेंगे जो RemovedInDjango18Warning नहीं हैं ब्याज की संभवतः भी शामिल होते हैं,

एक और तरीका है, python -Wi::DeprecationWarning manage.py runserver है।

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

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