Reputation: 387
Could someone please tell me what I may be doing wrong. I keep getting this message when I run my python code:
import random
foo = ['a', 'b', 'c', 'd', 'e']
random_item = random.choice(foo)
print random_item
Error
AttributeError: 'module' object has no attribute 'choice'
Upvotes: 33
Views: 69653
Reputation:
The problem in my case was I used random.choices()
with python 3.5. However, it is available from python 3.6 onwards.
Instead, use random.sample()
without the weights or cum_weights attributes you would specify in random.choices()
if you are using python 3.5 and 2.7. Documentation is here.
Upvotes: 18
Reputation: 501
If you are using Python older than 3.6 version, than you have to use NumPy library to achieve weighted random numbers. With the help of choice() method, we can get the random samples of one dimensional array and return the random samples of numpy array.
from numpy.random import choice
sampleList = [100, 200, 300, 400, 500]
randomNumberList = choice(
sampleList, 5, p=[0.05, 0.1, 0.15, 0.20, 0.5])
print(randomNumberList)
source : geeksforgeek
Upvotes: 1
Reputation: 6103
I also got this error by naming a method random
like this:
import random
def random():
foo = ['a', 'b', 'c', 'd', 'e']
random_item = random.choice(foo)
print random_item
random()
It's not your case (naming a file random.py
) but for others that search about this error and may make this mistake.
Upvotes: 4
Reputation: 1678
In short, Python's looking in the first file it finds named "random", and isn't finding the choice attribute.
99.99% of the time, that means you've got a file in the path/directory that's already named "random". If that's true, rename it and try again. It should work.
Upvotes: 3
Reputation: 117856
Shot in the dark: You probably named your script random.py
. Do not name your script the same name as the module.
I say this because the random
module indeed has a choice
method, so the import is probably grabbing the wrong (read: undesired) module.
Upvotes: 91
Reputation: 54183
Sounds like an import issue. Is there another module in the same directory named random
? If so (and if you're on python2, which is obvious from print random_item
) then it's importing that instead. Try not to shadow built-in names.
You can test this with the following code:
import random
print random.__file__
The actual random.py
module from stdlib lives in path/to/python/lib/random.py
. If yours is somewhere else, this will tell you where it is.
Upvotes: 7