HOWTO · Python
ZeroDivisionError: división flotante por cero en Python
Demostraremos cómo resolver el error de división cero en Python.
En esta página
Python genera ZeroDivisionError cuando una operación de división tiene un divisor igual a cero. Esto puede ocurrir con enteros o números de punto flotante, incluso cuando un cálculo produce el divisor. Esta guía explica la causa, muestra el comportamiento con enteros y números de punto flotante, y presenta dos formas de gestionar el resultado. Los ejemplos muestran los resultados observados de una división ordinaria, de divisores cero y de ambos métodos de gestión.
¿Qué causa ZeroDivisionError?
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
print(14 / 2)
7.0
Cuando una operación falla, Python informa ZeroDivisionError: division by zero. La excepción la genera el operador de división; no es exclusiva de la división con números de punto flotante. Tanto un divisor entero igual a 0 como un divisor de punto flotante igual a 0.0 la provocan. En el siguiente ejemplo independiente, restar valores iguales hace que el divisor sea cero. El controlador imprime el tipo y el mensaje de la excepción para que, al ejecutar el código, se puedan seleccionar como texto. La salida observada muestra el mismo tipo y mensaje de excepción para la división por cero con enteros y con números de punto flotante.
for numerator, divisor in [(17, 8 - 8), (17.0, 8.0 - 8.0)]:
try:
print(numerator / divisor)
except ZeroDivisionError as error:
print(f"{type(error).__name__}: {error}")
ZeroDivisionError: division by zero
ZeroDivisionError: division by zero
La expresión que proporciona el divisor importa tanto como el valor inicial de una variable. Un cálculo, un dato introducido por el usuario y convertido a número, o una actualización posterior pueden producir cero. Usar números de punto flotante no hace válida la división por cero, y el mensaje de la excepción no indica que el problema esté en el numerador. Comprueba el valor que se usa a la derecha de / en el momento en que se realiza la operación.
Comprueba el divisor antes de dividir
Cuando cero es un valor previsto, comprueba primero el divisor y elige un resultado que tenga sentido para la aplicación. El ejemplo siguiente usa None para indicar que el cociente no está disponible; otro programa podría omitir el cálculo, mostrar un mensaje o aplicar una alternativa específica del dominio. No sustituyas el resultado por un número arbitrario, salvo que ese valor tenga un significado válido en el cálculo.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
numerator = 17
divisor = 8 - 8
if divisor == 0:
quotient = None
else:
quotient = numerator / divisor
print(quotient)
None
Esta comprobación evita realizar la división cuando el divisor es cero. Resulta útil si cero es una entrada normal y el programa debe decidir qué hacer antes de calcular. Compara el divisor con cero, no con un umbral positivo: los divisores negativos son válidos en la aritmética ordinaria. Si el valor puede cambiar entre la comprobación y la división, mantén ambas operaciones próximas o usa el manejo de excepciones alrededor de la operación.
Gestiona la división con try y except
Usa una cláusula try cuando se intente realizar la división y gestiona ZeroDivisionError con una cláusula except correspondiente. Capturar esta excepción específica permite que otros errores de programación sigan siendo visibles, en vez de tratar cualquier fallo como una división por cero. Este ejemplo ejecutable muestra tanto una división correcta como el caso del divisor cero; debajo se incluye la salida observada.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
for divisor in (4, 0):
try:
print(20 / divisor)
except ZeroDivisionError:
print("Cannot divide by zero.")
5.0
Cannot divide by zero.
Las palabras clave try y except forman parte de la sintaxis de manejo de excepciones de Python; no son métodos. Coloca dentro del bloque try el código que podría generar la excepción y añade la acción de recuperación en el controlador correspondiente. Si no procede recuperarse, deja que la excepción se propague para que pueda gestionarla quien llama al código.
Elige una estrategia para tu código
Da preferencia a comprobar el divisor antes de dividir cuando cero sea una entrada prevista y ya conozcas el comportamiento alternativo adecuado. Usa try/except ZeroDivisionError cuando intentar la operación sea la opción más clara y el caso excepcional tenga una recuperación útil. Ambos métodos deben conservar el sentido del cálculo, en lugar de limitarse a ocultar el error.
Ninguno de los dos garantiza que la aplicación completa no pueda fallar: otras operaciones pueden generar otras excepciones, y una alternativa puede ser inadecuada para el dominio. Evita un except sin especificar, que puede ocultar errores ajenos. Si estás investigando un fallo existente, sigue el divisor hasta su origen e inspecciona la operación aritmética o la entrada que lo produjo. Después, decide si se debe rechazar el cero, representarlo como un resultado no disponible o gestionarlo mediante una regla específica del dominio.