Pourquoi ne le mesurez-vous pas à l'aide du timeit
module ? De cette façon, vous pouvez voir si cela est pertinent pour votre application.
OK, donc je viens d'essayer ce qui suit:
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))
Résultat:
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
Donc, comme prévu, ne pas avoir de gestionnaire d'exceptions est légèrement plus rapide (mais vous explose au visage lorsque l'exception se produit), et try/except
est plus rapide qu'un explicite if
tant que la condition n'est pas remplie.
Mais tout est dans le même ordre de grandeur et peu susceptible d'avoir une importance dans les deux cas. Ce n'est que si la condition est réellement remplie que la if
version est nettement plus rapide.