¿Por qué no lo mides con el ? De esta forma, puede ver si es relevante para su aplicación.
bien, así que he acaba de intentar lo siguiente:
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))
Resultado:
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
Así, como se esperaba, no tener ningún gestor de excepciones es ligeramente más rápido (pero explota en su enfrentar cuando se produce la excepción), y try/except
es más rápido que un if
explícito, siempre que la condición no se cumpla.
Pero todo está dentro del mismo orden de magnitud y es poco probable que importe de cualquier manera. Solo si la condición se cumple realmente, la versión if
es significativamente más rápida.
Cuando lo midió, ¿qué aprendió? –
Pregunta relacionada: http://stackoverflow.com/questions/1835756/ – tzot
Utilice try/except si las posibilidades de control van a excepción de que la parte es menor y if/else si hay más posibilidades. – shadow0359