En otra pregunta , la respuesta aceptada sugirió reemplazar una declaración if (muy barata) en el código Python con un bloque try / except para mejorar el rendimiento.
Dejando de lado los problemas de estilo de codificación, y asumiendo que la excepción nunca se activa, ¿cuánta diferencia hace (en términos de rendimiento) tener un controlador de excepciones, en comparación con no tener uno, en comparación con una declaración if de comparación a cero?
Respuestas:
¿Por qué no lo mides usando el
timeit
módulo ? De esa manera, puede ver si es relevante para su aplicación.Bien, acabo de intentar lo siguiente:
Resultado:
Entonces, como se esperaba, no tener ningún controlador de excepciones es un poco más rápido (pero explota en su cara cuando ocurre la excepción) y
try/except
es más rápido que un explícitoif
siempre que no se cumpla la condición.Pero todo está dentro del mismo orden de magnitud y es poco probable que importe de cualquier manera. Solo si realmente se cumple la condición, la
if
versión es significativamente más rápida.fuente
try/except
es más rápido queif a != 0
Esta pregunta se responde realmente en las Preguntas frecuentes sobre diseño e historia :
fuente
Esta pregunta es engañosa. Si asume que la excepción nunca se activa, ninguno de los dos es el código óptimo.
Si asume que la excepción se activa como parte de una condición de error, ya está fuera del ámbito de querer un código óptimo (y probablemente no lo esté manejando a un nivel detallado como ese de todos modos).
Si está utilizando la excepción como parte del flujo de control estándar, que es la forma Pythonic de "pedir perdón, no permiso", entonces la excepción se activará y el costo dependerá del tipo de excepción, el tipo de si y el porcentaje de tiempo que estima que ocurre la excepción.
fuente