如何使用类型建议来指定参数只能从选项列表中获取值

how to use type suggestions to specify an argument can only take values from a list of options

假设一个 Python 函数有一个参数 option,它只能取特定值,比如 option_aoption_b。如何将其指定为类型注释?这是一种行不通的方法:

def f(x, option: Union['option_a', 'option_b'] = 'option_a'):
    if option == 'option_a':
        print('option is option_a')
    elif option == 'option_b':
        print('option is option_b')
    else:
        raise ValueError(f'invalid option: {option}')

它不起作用,因为 Union['option_a', 'option_b'] 实际上会寻找 类 option_aoption_b 而不是将它们解释为文字。

为此,您可以结合使用 Union 和 Literal:

def foo(s: Union[Literal['a'],Literal['b']]):
    print(s)

foo('a')  # good
foo('b')  # good
foo('c')  # error