异常处理,功能方式。
tryingsnake的Python项目详细描述
示例
用参数包装函数:
>>>fromtryingsnakeimportTry,Try_,Success,Failure>>>fromoperatorimportadd,truediv>>>Try(add,0,1)Success(1)>>>Try(truediv,1,0)# doctest:+ELLIPSISFailure(ZeroDivisionError(...))
避免哨兵值:
>>>defmean_1(xs):...try:...returnsum(xs)/len(xs)...exceptZeroDivisionErrorase:...returnfloat("inf")# What does it mean?>>>mean_1([])inf
对
>>>defmean_2(xs):...returnsum(xs)/len(xs)>>>Try(mean_2,[])# doctest:+ELLIPSISFailure(ZeroDivisionError(...))>>>Try(mean_2,["foo","bar"])# doctest:+ELLIPSISFailure(TypeError(...))
沿着快乐的道路走:
>>>definc(x):returnx+1>>>definv(x):return1./x>>>Success(1).map(inc).map(inv)Success(0.5)>>>Failure(Exception("e")).map(inc).map(inv)Failure(Exception('e',))>>>Success(-1).map(inc).map(inv)# doctest:+ELLIPSISFailure(ZeroDivisionError(...))
恢复:
>>>defget(url):...if"mirror"inurl:...raiseIOError("No address associated with hostname")...returnurl>>>mirrors=["http://mirror1.example.com","http://example.com"]>>>Try(get,mirrors[0]).recover(lambda_:get(mirrors[1]))Success('http://example.com')
让他们失败:
>>>fromoperatorimportgetitem>>>Try(getitem,[],0)Failure(IndexError('list index out of range',))>>>Try_.set_unhandled([IndexError])>>>Try(getitem,[],0)Traceback(mostrecentcalllast):...IndexError:listindexoutofrange
使事情(相对)简单
>>>importmath>>>xs=[1.0,0.0,"-1",-3,2,1+2j]>>>sqrts=[Try(math.sqrt,x)forxinxs]>>>[x.get()forxinsqrtsifx.isSuccess][1.0,0.0,1.4142135623730951]>>>defget_etype(e):...returnTry(lambdax:type(x).__name__,e)>>>[x.recoverWith(get_etype).get()forxinsqrtsifx.isFailure]['TypeError','ValueError','TypeError']
安装
pip install tryingsnake
或
easy_install tryingsnake
许可证
麻省理工学院,看 LICENSE
常见问题解答
- 问:这个项目生产准备好了吗?
- A:不,可能不会。
- 问:为什么推荐使用mixedcase方法名而不是小写 佩普8?
- 答:主要是为了使python和scala代码之间的切换变得轻松愉快。 尽可能的。