python/returns
IO & IOResult
wefree
2022. 9. 4. 22:10
https://returns.readthedocs.io/en/latest/pages/io.html#
retry, error recovery 등의 추가 기능을 제공하지 않는 것 같다.
차라리 Result (or ResultE) 를 사용하는 것이 나을 것 같다.
###########################################################################
# IO
# Some IO never fails, like: getting current date and time, random number, or OS name
###########################################################################
import random
from returns.io import IO
from returns.unsafe import unsafe_perform_io
x = IO(random.randint(1, 10))
y = IO(random.choice(['A', 'B']))
z = IO.do(
str(a) + ':' + b
for a in x
for b in y
)
unsafe_perform_io(z)
###########################################################################
# IOResult
# Some IO might fail, like: sending network requests, accessing filesystem, or database
###########################################################################
from returns.io import IOResult, IOResultE, IOSuccess, IOFailure
from returns.result import Result, Success
from returns.unsafe import unsafe_perform_io
x: Result[int, Exception] = Success(2)
y: Result[int, Exception] = Success(3)
io_x: IOResultE[int] = IOResult.from_result(x)
io_y: IOResultE[int] = IOResult.from_result(y)
io_success: IOResultE[int] = IOSuccess(4)
io_failure: IOResultE[int] = IOFailure(ValueError("invalid value"))
z = IOResult.do(
a + b
for a in io_x
for b in io_y
)
match z:
case IOSuccess(x):
print(x)
case IOFailure(e):
print(e)
unsafe_perform_io(z)