Maybe/Option/Either 处理缺失值与错误。Result类型避免异常。Try成功或失败的容器。函数式链式调用。pyrsistent不可变数据。fn.py模块。toolz函数式工具。避免None检查的嵌套。
from typing import Optional, Generic, TypeVar, Union
T = TypeVar('T')
E = TypeVar('E')
class Result(Generic[T, E]):
def __init__(self, value=None, error=None):
self.value = value
self.error = error
@classmethod
def ok(cls, value):
return cls(value=value)
@classmethod
def err(cls, error):
return cls(error=error)
def is_ok(self):
return self.error is None
def map(self, func):
if self.is_ok():
return Result.ok(func(self.value))
return self
def bind(self, func):
if self.is_ok():
return func(self.value)
return self
def safe_divide(a, b):
if b == 0:
return Result.err("div by zero")
return Result.ok(a / b)
result = (Result.ok(10)
.bind(lambda x: safe_divide(x, 2))
.map(lambda x: x * 3))
if result.is_ok():
print(f"Result: {result.value}")
else:
print(f"Error: {result.error}")
Python Python函数式错误处理