try - Ignorar divide por 0 de advertencia en python
try except anidados python (2)
Tengo una función para cuestiones estadísticas:
import numpy as np
from scipy.special import gamma as Gamma
def Foo(xdata):
...
return x1 * (
( #R is a numpy vector
( ((R - x2)/beta) ** (x3 -1) ) *
( np.exp( - ((R - x2) / x4) ) ) /
( x4 * Gamma(x3))
).real
)
A veces recibo del shell la siguiente advertencia:
RuntimeWarning: divide by zero encountered in...
Utilizo la función numpy isinf
para corregir los resultados de la función en otros archivos donde necesito hacerlo. así que no tengo que estar avisando.
¿Hay una manera de ignorar el mensaje? En otras palabras, no quiero que el shell imprima este mensaje.
No quiero deshabilitar todas las advertencias de python, solo esta.
Puede desactivar la advertencia con numpy.seterr
. Ponga esto antes de la posible división por cero:
np.seterr(divide=''ignore'')
Eso deshabilitará las advertencias de división cero globalmente. Si solo desea deshabilitarlos un poco, puede usar numpy.errstate
en una cláusula with
:
with np.errstate(divide=''ignore''):
# some code here
Para una división de cero por cero (indeterminado, da como resultado un NaN), el comportamiento de error ha cambiado con la versión numpy 1.12.0: esto ahora se considera "no válido", mientras que anteriormente era "dividir".
Por lo tanto, si existe la posibilidad de que su numerador también sea cero, use
np.seterr(divide=''ignore'', invalid=''ignore'')
o
with np.errstate(divide=''ignore'', invalid=''ignore''):
# some code here
Consulte la sección "Compatibilidad" en las notas de la versión , último párrafo antes de la sección "Nuevas características":
La comparación de los números de punto flotante de NaN ahora genera una advertencia de tiempo de ejecución no válida. Si se espera un NaN, se puede ignorar la advertencia utilizando np.errstate.
También puede usar numpy.divide
para la división. De esa manera no tienes que deshabilitar explícitamente las advertencias.
In [725]: np.divide(2, 0)
Out[725]: 0