python 3.4:在Enum上的random.choice

Co_*_*_42 23 python random enums python-3.4

我想在Enum上使用random.choice.

我试过了 :

class Foo(Enum):
    a = 0
    b = 1
    c = 2
bar = random.choice(Foo)
Run Code Online (Sandbox Code Playgroud)

但是这段代码不起作用,我怎么能这样做?

Mar*_*ers 46

一个Enum不是一个序列,所以你不能将它传递给它random.choice(),它试图选择0和之间的索引len(Foo).像字典一样,索引访问一个Enum代替期望枚举名称传入,所以Foo[<integer>]这里失败了KeyError.

您可以先将其强制转换为列表:

bar = random.choice(list(Foo))
Run Code Online (Sandbox Code Playgroud)

这工作,因为Enum 支持迭代.

演示:

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

  • 来到这里寻找相同错误的解决方案。想要投票。意识到我已经投票了。然后意识到我出于相同的需要在相同的Python文件中的其他地方应用了相同的强制转换...只能投票一次。 (4认同)