के साथ try
/except
के बजाय अपवाद को दबाने के लिए contextlib.suppress
का उपयोग क्यों करेगा?क्यों संदर्भ के साथ/छोड़ने के विपरीत contextlib.suppress का उपयोग करें?
इन दो तरीकों के बीच वर्ण की राशि में कोई अंतर नहीं (अगर कुछ भी, suppress
अधिक कैरेक्टर हैं), और भले ही कोड अक्सर अक्षरों के स्थान पर एलओसी में गिना जाता है, suppress
भी try
तुलना में बहुत धीमी हो रहा है है/दोनों ही मामलों में except
एक त्रुटि उठाया जब जाता है और जब यह नहीं है:
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> from timeit import timeit
>>> # With an error
>>> timeit("""with suppress(ValueError):
x = int('a')""", setup="from contextlib import suppress")
1.9571568971892543
>>> timeit("""try:
x = int('a')
except ValueError:
pass""")
1.0758466499161656
>>> # With no error
>>> timeit("""with suppress(ValueError):
x = int(3)""", setup="from contextlib import suppress")
0.7513525708063895
>>> timeit("""try:
x = int(3)
except ValueError:
pass""")
0.10141028937128027
>>>
यह दो लाइनों को बचाता है। यदि आपके पास –
जैसे कई लगातार ब्लॉक हैं, तो यह पठनीयता में बहुत सुधार करता है, इसी प्रकार, जब आप लूप का उपयोग कर सकते हैं तो 'any() 'या' all() 'का उपयोग क्यों करें? मुझे लगता है कि 'contextlib.suppress' का उपयोग करके पठनीयता और रख-रखाव में मदद मिलती है। –
@ सिमोनविसर 'कोई भी() 'और' सभी() '* स्पष्ट रूप से * लाइन को बुद्धिमान और चरित्र के अनुसार कोड को छोटा बना देता है। मुझे भी यकीन है कि 'किसी भी() 'और' सभी() '' लूप' की तुलना में प्रदर्शन के अनुसार तेज हैं। जहां तक मैं देख सकता हूं, 'दबाने' का उपयोग करने का एकमात्र कारण यह है कि यह थोड़ा और पठनीय है (और यह अविश्वसनीय है क्योंकि यह अधिक वर्ण लेता है)। 'कोशिश/छोड़कर' का उपयोग करना * दूसरी तरफ * तेज * तेज है। –