Python类型:给定的值集

Python类型:给定的值集,python,typing,Python,Typing,我想键入一个方法的参数,使其成为有限组有效值中的一个。因此,基本上,我想让输入相当于以下最小示例: valid_参数=[“值”,“其他值”] def类型化方法(参数): 如果不是有效的_参数中的参数: raise VALUERROR(“无效参数”) 我已经检查了输入,但没有找到解决方案。也许我只是不能完全理解文档。有这样的解决办法吗?可以创建它吗?Python 3.8中刚刚引入了此功能:。有关详细信息,请参阅 例如: def typed_方法(参数:Literal[“value”,“other

我想键入一个方法的参数,使其成为有限组有效值中的一个。因此,基本上,我想让
输入
相当于以下最小示例:

valid_参数=[“值”,“其他值”]
def类型化方法(参数):
如果不是有效的_参数中的参数:
raise VALUERROR(“无效参数”)
我已经检查了
输入
,但没有找到解决方案。也许我只是不能完全理解文档。有这样的解决办法吗?可以创建它吗?

Python 3.8中刚刚引入了此功能:。有关详细信息,请参阅

例如:

def typed_方法(参数:Literal[“value”,“other value”]):
通过
我想键入一个方法的参数,使其成为有限组有效值中的一个

使用枚举

from enum import Enum


class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3


def handle_color(color):
    if not isinstance(color, Color):
        raise ValueError('Not a color')
    print(color)


handle_color(Color.GREEN)
handle_color('something')

这并不是对这个问题的真正回答,因为这个问题要求使用
键入
来解决。仅供参考,这就产生了:就编码风格而言,我认为应该使用类型检查来检测语法错误,而不是语义错误。通常,通过检查类型可以完全避免语法错误。语义错误——传递“没有意义”的值,如
parameter=“a different value”
——应该以最小示例的方式(可能使用更具表现力的异常类型)单独和精确地处理。使用类型检查检查语义错误会将业务逻辑(可能会频繁更改)移动到读者不会想到的地方。@EliasStrehle我同意。我的最小示例只是为了说明我想要输入什么。我不想用语法类型替换语义错误检查。我有一个可能重复的列表:
my_list=[“a”、“b”、“c”]
,我想将此列表用作值和文字类型。但是,当我执行
Literal[my_list]
时,Literal会抱怨。你知道我如何得到一个预定义列表的文本吗?