我真的很喜欢在 Scala 中使用 Option 和 Either 单子(monad)。 Python中有这些东西的等价物吗?如果没有,那么在不引发异常的情况下,处理错误或“缺少值(value)”的 Pythonic 方式是什么?
最佳答案
一个函数说“我在这一点上没有定义”的pythonic方式是引发一个异常。
>>> int("blarg")
Traceback (most recent call last):
...
ValueError: invalid literal for int() with base 10: 'blarg'
>>> dict(foo=5)['bar']
Traceback (most recent call last):
...
KeyError: 'bar'
>>> 1 / 0
Traceback (most recent call last):
...
ZeroDivisionError: integer division or modulo by zero
这部分是因为没有(通常有用的)python 静态类型检查器。 Python 函数在编译时无法在语法上声明它具有特定的 codomain;没有办法强制调用者匹配函数返回类型中的所有情况。
如果你愿意,你可以(非python方式)编写一个 Maybe
包装器:
class Maybe(object):
def get_or_else(self, default):
return self.value if isinstance(self, Just) else default
class Just(Maybe):
def __init__(self, value):
self.value = value
class Nothing(Maybe):
pass
但我不会这样做,除非您尝试将某些东西从 Scala 移植到 Python 而不做太多更改。
关于python - Scala 的 Option 或 Either 是否有 Python 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22992433/