Pourquoi ne le mesurez-vous pas à l'aide du timeitmodule ? 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/exceptest plus rapide qu'un explicite iftant 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 ifversion est nettement plus rapide.