2015-04-12 7 views
0

Я использую python3. Сначала я использую random.choice в терминале, и он работает.AttributeError: объект 'module' не имеет атрибута 'choice'

Python 3.2.3 (default, Feb 27 2014, 21:31:18) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import random 
>>> x = [1, 2, 3] 
>>> random.choice(x) 
3 

Но когда я запускаю его в моем сценарии, я получаю сообщение:

AttributeError: 'module' object has no attribute 'choice' 

Вот код

import random 
from scipy import * 
from numpy import linalg as LA 
import pickle 
import operator 


def new_pagerank_step(current_page, N, d, links): 
    print(links[current_page]) 
    if random.rand() > 1 - d: 
     next_page = random.choice(links[current_page]) 
    else: 
     next_page = random.randint(0, N) 
    return next_page 


def pagerank_wikipedia_demo(): 
    with open("wikilinks.pickle", "rb") as f: 
     titles, links = pickle.load(f) 
    current_page = 0 
    T = 1000 
    N = len(titles) 
    d = 0.4 
    Result = {} 
    result = [] 
    for i in range(T): 
     result.append(current_page) 
     current_page = new_pagerank_step(current_page, N, d, links) 
    for i in range(N): 
     result.count(i) 
     Result[i] = result.count(i)/T 
    Sorted_Result = sorted(Result.items(), key=operator.itemgetter(1)) 

pagerank_wikipedia_demo() 

Здесь links[i] (i целое) является список. Когда я запускаю этот скрипт, он не работает с сообщением, упомянутым выше.

Я также проверил, что имя сценария не random. И есть только один файл с именем random.py в /usr/lib/python3.2/random.py

Почему это происходит?

+6

сделать 'импорт случайный; печать (случайный .__ файл __)' в верхней части файла, вы, вероятно, есть файл random.py на своем пути или .pyc –

+3

Смотрите этот вопрос: Http: // StackOverflow .com/questions/25695412/module-object-has-no-attribute-choice-try-to-use-random-choice – RafaelC

+0

Я проверил это и есть два файла. один - random.cpython-32.pyc, а один - random.py – epx

ответ

2

Вы замаскирован модуль с numpy.random объектом здесь:

import random 
from scipy import * 

from scipy import * импорта приносит целые много имен, в том числе random:

>>> from scipy import * 
>>> random 
<module 'numpy.random' from '/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/numpy/random/__init__.pyc'> 

Это заменить случайный модуль ,

Либо не использовать импорт подстановочные или импортировать модуль random после импорта все от scipy.

Вы также можете импортировать choice из random модуля и обращаться к нему напрямую, или использовать другое имя для импорта для связывания:

from random import choice 
from scipy import * 

# use choice, not random.choice 

или

import random as stdlib_random 
from scipy import * 

# use stdlib_random.choice, not random.choice 
1

В дополнение к Martijin Pieters ответить Я хочу добавить, что вы также можете импортировать модуль random с псевдонимом:

import random as rdm 
from scipy import *  

# Then you can 
rdm.choice(some_sequence) 
Смежные вопросы