exceptions - python try except print error
Aumentar la advertencia en Python sin interrumpir el programa (3)
No debe raise
la advertencia, debe usar el módulo de warnings
. Al aumentarlo, está generando un error en lugar de una advertencia.
Estoy lidiando con un problema sobre cómo generar una Advertencia en Python sin tener que dejar que el programa se bloquee / detenga / interrumpa.
Utilizo la siguiente función simple que solo comprueba si el usuario le pasó un número distinto de cero. Si el usuario pasa un cero, el programa debería advertir al usuario, pero continuar normalmente. Debería funcionar como el siguiente código, pero debería usar la clase Advertencia (), Error () o Excepción () en lugar de imprimir la advertencia manualmente.
def is_zero(i):
if i != 0:
print "OK"
else:
print "WARNING: the input is 0!"
return i
Si utilizo el siguiente código y paso 0 a la función, el programa se bloquea y el valor nunca se devuelve. En cambio, quiero que el programa continúe normalmente e informar al usuario que pasó 0 a la función.
def is_zero(i):
if i != 0:
print "OK"
else:
raise Warning("the input is 0!")
return i
Quiero poder probar que se ha lanzado una advertencia probándolo por unittest. Si simplemente imprimo el mensaje, no puedo probarlo con assertRaises en unittest.
Por defecto, a diferencia de una excepción, una advertencia no interrumpe.
Después de importar warnings
, se recomienda especificar una clase de Warnings al generar una advertencia. Si no se especifica uno, literalmente es UserWarning
por defecto. Esto no se ve muy bien:
>>> warnings.warn(''This is my lazy warning.'')
<string>:1: UserWarning: This is my lazy warning.
Para simplemente usar una clase preexistente en su lugar, por ejemplo, Warning
:
>>> warnings.warn(''This is my generic warning.'', Warning)
<string>:1: Warning: This is my generic warning.
Crear una clase de advertencia personalizada es similar a crear una clase de excepción personalizada:
>>> class MyCustomWarning(UserWarning):
... pass
...
... warnings.warn(''This is my custom warning.'', MyCustomWarning)
<string>:1: MyCustomWarning: This is my custom warning.
Para las pruebas, considere assertWarns
o assertWarnsRegex
.
import warnings
warnings.warn("Warning...........Message")
Ver la documentación de Python: here