RxPY 错误处理运算符
catch
当发生异常时,此运算符将终止源可观察对象。
语法
catch(handler)
参数
handler: 当源observable发生错误时,将会发出此observable。
返回值
这将返回一个observable,它会先收到源observable发生错误前的值,然后再收到handler 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:如果源可观察发生错误,重试的次数。
返回值
根据给定的重试次数,它将返回源可观察的重复序列中的可观察。
示例
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!