RxPY - Opérateurs de gestion des erreurs

capture

Cet opérateur mettra fin à l'observable source lorsqu'il y a une exception.

Syntaxe

catch(handler)

Paramètres

handler: Cette observable sera émise, lorsque l'observable source a une erreur.

Valeur de retour

Il retournera une observable, qui aura des valeurs de la source observable avant l'erreur, suivies des valeurs du gestionnaire observable.

Exemple

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)))

Dans cet exemple, nous avons créé une exception, lorsque la valeur source de l'observable est 4, de sorte que la première observable se termine là et est ensuite suivie par les valeurs du gestionnaire.

Production

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

retenter

Cet opérateur réessayera sur l'observable source en cas d'erreur et une fois le nombre de tentatives terminé, il se terminera.

Syntaxe

retry(count)

Paramètres

count: le nombre de fois à réessayer s'il y a une erreur de l'observable source.

Valeur de retour

Il renverra une observable de la source observable dans une séquence répétée selon le nombre de tentatives donné.

Exemple

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)))

Production

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!