2016-01-05 5 views
55

निम्न कोड के लिए:PyLint संदेश: प्रवेश प्रारूप-प्रक्षेप

लॉगिंग प्रारूप-प्रक्षेप (W1202):

logger.debug('message: {}'.format('test')) 

pylint निम्न चेतावनी का उत्पादन लॉगिंग कार्यों में% स्वरूपण का उपयोग करें और जब एक प्रवेश बयानकी एक कॉल रूप है के रूप में तर्क प्रयुक्त% पैरामीटर पास"लॉगिंग। (Format_string.format (format_args ...))"। इस तरह के कॉल% स्वरूपण के बजाय का उपयोग करना चाहिए, लेकिन तर्क के रूप में मानकों को पारित करके प्रवेश समारोह के लिए प्रक्षेप छोड़ दें।

मुझे पता है कि मैं इस चेतावनी को बंद कर सकता हूं, लेकिन मुझे इसे समझना अच्छा लगता है। मैं मान लिया format() का उपयोग कर python3 में बयान प्रिंट करने की पसंदीदा तरीका है। लॉगर स्टेटमेंट्स के लिए यह सच क्यों नहीं है?

उत्तर

68

यह लकड़हारा बयान के लिए सच है क्योंकि यह स्ट्रिंग की तरह पूर्व "%" प्रारूप पर निर्भर करता है इस स्ट्रिंग लकड़हारा कॉल करने के लिए दिया अतिरिक्त तर्कों का उपयोग की आलसी प्रक्षेप प्रदान करने के लिए नहीं है। के बजाय उदाहरण कर लिए:

logger.error('oops caused by %s' % exc) 

आप

logger.error('oops caused by %s', exc) 

तो स्ट्रिंग केवल तभी संदेश वास्तव में उत्सर्जित होता है अंतर्वेशित हो जाएगा करना चाहिए।

आप जब .format() का उपयोग कर इस कार्यशीलता के लाभ नहीं कर सकते हैं।


प्रति logging किए गए दस्तावेज़ों की Optimization अनुभाग:

संदेश तर्कों की

प्रारूपण आस्थगित जब तक यह टाला नहीं जा सकता है। हालांकि, लॉगिंग विधि को पारित तर्कों की गणना करना महंगा भी हो सकता है, और यदि आप लॉगर केवल अपनी घटना को फेंक देंगे तो आप इसे करने से बच सकते हैं।

+0

कार्यक्षमता क्या है जो किसी से लाभ नहीं उठा सकती है? '.format()' हमेशा विस्तारित है? क्या यह "आलसी इंटरपोलेशन" का अर्थ है, जिसे केवल बुलाया जाता है जब इसे बुलाया जाता है? – pfnuesel

+3

@pfnuesel, .format() को लॉगर से कॉल करने से पहले विस्तारित किया गया है। आतंक, जबकि "आलसी इंटरपोलेशन" का अर्थ है केवल विस्तार केवल तभी किया जाता है जब आवश्यक हो (उदाहरण के लिए संदेश वास्तव में कहीं प्रदर्शित होता है) – sthenault

+6

क्या इस आलसी मूल्यांकन के लिए कोई अच्छा संदर्भ है पसंदीदा और एक अंतर बना रहे हैं? मुझे [पीईपी 282] में एक नहीं मिला (https://www.python.org/dev/peps/pep-0282/) या [लॉगिंग लाइब्रेरी] (https://docs.python.org/2/library /logging.html) – culix

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