在枚举上使用random.choice

74 投票
1 回答
29486 浏览
提问于 2025-04-18 09:56

我想在一个Enum(枚举)上使用random.choice这个功能。

我试过这样做:

class Foo(Enum):
    a = 0
    b = 1
    c = 2
bar = random.choice(Foo)

但是这段代码出现了KeyError的错误。那我该怎么随机选择一个Enum的成员呢?

1 个回答

130

一个 Enum(枚举)并不是一个 序列,所以你不能把它传给 random.choice()。这个函数是想在 0 到 len(Foo) 之间随机选择一个索引。就像字典一样,访问 Enum 时需要传入枚举的 名称,所以用 Foo[<integer>] 这种方式会出错,提示 KeyError

你可以先把它转换成列表:

bar = random.choice(list(Foo))

这样做是可行的,因为 Enum 确实支持迭代

示例:

>>> from enum import Enum
>>> import random
>>> class Foo(Enum):
...     a = 0
...     b = 1
...     c = 2
... 
>>> random.choice(list(Foo))
<Foo.a: 0>

撰写回答