AMHD
AMHD

Reputation: 387

'module' object has no attribute 'choice' - trying to use random.choice

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

Answers (6)

user4985526
user4985526

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

Hasnain Sikander
Hasnain Sikander

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

Van Tr
Van Tr

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

James
James

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

Cory Kramer
Cory Kramer

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

Adam Smith
Adam Smith

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

Related Questions