validar try tipos sirve que por para excepción excepciones errores ejercicios ejemplos comunes archivos anidados python numpy suppress-warnings divide-by-zero

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