RxPY - Operatori di gestione degli errori

catturare

Questo operatore terminerà la sorgente osservabile quando si verifica un'eccezione.

Sintassi

catch(handler)

Parametri

gestore: questo osservabile verrà emesso quando l'osservabile sorgente ha un errore.

Valore di ritorno

Restituirà un osservabile, che avrà valori dalla sorgente osservabili prima dell'errore, seguiti da valori osservabili dal gestore.

Esempio

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

In questo esempio, abbiamo creato un'eccezione, quando il valore di origine dell'osservabile è 4, quindi il primo osservabile viene terminato lì e successivamente seguito dai valori del gestore.

Produzione

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

riprova

Questo operatore riproverà sull'origine osservabile quando si verifica un errore e una volta terminato il conteggio dei tentativi, terminerà.

Sintassi

retry(count)

Parametri

count: il numero di volte per riprovare se c'è un errore dalla fonte osservabile.

Valore di ritorno

Restituirà un osservabile dalla sorgente osservabile in sequenza ripetuta secondo il numero di tentativi fornito.

Esempio

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

Produzione

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!