RxPY - 错误处理运算符

catch

此运算符将在出现异常时终止源可观察对象。

语法

catch(handler)

参数

handler: 当源 observable 出现错误时,将发出此 observable。

返回值

它将返回一个 observable,它将在错误发生之前具有来自源 observable 的值,然后是来自处理程序 observable 的值。

示例

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

在这个例子中,我们创建了一个异常,当来自 observable 的源值为 4 时,因此第一个 observable 在那里终止,然后是来自处理程序的值。

输出

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

retry

当出现错误时,此运算符将在源可观察对象上重试,一旦重试计数完成,它将终止。

语法

retry(count)

参数

count: 如果源 Observable 出现错误,重试的次数。

返回值

它将根据给定的重试计数以重复序列从源可观察对象返回一个可观察对象。

示例

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

输出

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!