आप timeitमॉड्यूल का उपयोग करके इसे क्यों नहीं मापते हैं ? इस तरह आप देख सकते हैं कि क्या यह आपके आवेदन के लिए प्रासंगिक है।
ठीक है, इसलिए मैंने निम्नलिखित कोशिश की है:
import timeit
statements=["""\
try:
b = 10/a
except ZeroDivisionError:
pass""",
"""\
if a:
b = 10/a""",
"b = 10/a"]
for a in (1,0):
for s in statements:
t = timeit.Timer(stmt=s, setup='a={}'.format(a))
print("a = {}\n{}".format(a,s))
print("%.2f usec/pass\n" % (1000000 * t.timeit(number=100000)/100000))
परिणाम:
a = 1
try:
b = 10/a
except ZeroDivisionError:
pass
0.25 usec/pass
a = 1
if a:
b = 10/a
0.29 usec/pass
a = 1
b = 10/a
0.22 usec/pass
a = 0
try:
b = 10/a
except ZeroDivisionError:
pass
0.57 usec/pass
a = 0
if a:
b = 10/a
0.04 usec/pass
a = 0
b = 10/a
ZeroDivisionError: int division or modulo by zero
इसलिए, जैसा कि अपेक्षित था, किसी भी अपवाद हैंडलर का न होना थोड़ा तेज है (लेकिन अपवाद होने पर आपके चेहरे पर चोट लग जाती है), और जब तक यह शर्त पूरी नहीं होती है तब तक try/exceptएक स्पष्ट की तुलना में तेज होता है if।
लेकिन यह परिमाण के एक ही क्रम के भीतर है और किसी भी तरह से बात करने की संभावना नहीं है। केवल अगर हालत वास्तव में मिले हैं, तो ifसंस्करण काफी तेज है।