RxPY - Operadores de manejo de errores

captura

Este operador terminará la fuente observable cuando haya una excepción.

Sintaxis

catch(handler)

Parámetros

manejador: Este observable será emitido cuando la fuente observable tenga un error.

Valor devuelto

Devolverá un observable, que tendrá valores de la fuente observables antes del error, seguido de valores observables del controlador.

Ejemplo

from rx import of, operators as op
from datetime import date
test = of(1,2,3,4,5,6)
handler = of(11,12,13,14)
def casetest(e):
   if (e==4):
      raise Exception('err')
   else:
      return e
sub1 = test.pipe(
   op.map(lambda e : casetest(e)),
   op.catch(handler)
)
sub1.subscribe(lambda x: print("The value is {0}".format(x)),
on_error = lambda e: print("Error : {0}".format(e)))

En este ejemplo, hemos creado una excepción, cuando el valor fuente del observable es 4, por lo que el primer observable termina allí y luego lo siguen los valores del controlador.

Salida

E:\pyrx>python testrx.py
The value is 1
The value is 2
The value is 3
The value is 11
The value is 12
The value is 13
The value is 14

rever

Este operador volverá a intentar en la fuente observable cuando haya un error y una vez que se complete el recuento de reintentos, terminará.

Sintaxis

retry(count)

Parámetros

count: el número de veces que se reintentará si hay un error de la fuente observable.

Valor devuelto

Devolverá un observable de la fuente observable en secuencia repetida según el recuento de reintentos dado.

Ejemplo

from rx import of, operators as op
test = of(1,2,3,4,5,6)
def casetest(e):
   if (e==4):
     raise Exception('There is error cannot proceed!')
   else:
     return e
sub1 = test.pipe(
   op.map(lambda e : casetest(e)),
   op.retry(2)
)
sub1.subscribe(lambda x: print("The value is {0}".format(x)),
on_error = lambda e: print("Error : {0}".format(e)))

Salida

E:\pyrx>python testrx.py
The value is 1
The value is 2
The value is 3
The value is 1
The value is 2
The value is 3
Error: There is error cannot proceed!