python 3.4: random.choice on Enum
Question: I would like to use random.choice on an Enum.

I tried :

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

But this code is not working, how can I do that ?


Answer: An `Enum` is not a _sequence_ , so you cannot pass it to `random.choice()`,
which tries to pick an index between 0 and `len(Foo)`. Like a dictionary,
index access to an `Enum` instead expects enumeration _names_ to be passed in,
so `Foo[<integer>]` fails here with a `KeyError`.

You can cast it to a list first:

    
    
    bar = random.choice(list(Foo))
    

This works because `Enum` [_does_ support
iteration](https://docs.python.org/3/library/enum.html#iteration).

Demo:

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

