python2.7: пример сценария, в разделе C он может работать, но в разделе D он имеет AttributeError - PullRequest
0 голосов
/ 28 мая 2011

Я изучаю Python.Сегодня я сталкиваюсь со странной проблемой.

from urllib import urlopen

url='http://www.google.com'
f=urlopen(url).read()
print f

Это пример сценария, он может выполняться, если он находится в разделе C, однако в разделе D он имеет AttributeError:

Traceback (most recent call last):<br> File "D:\urlopen.py", line 1, in <module><br> from urllib import urlopen File "D:\urllib.py", line 7, in <module><br> nettext=urllib.urlopen(strurl).read()<br> AttributeError: 'module' object has no attribute 'urlopen'

Я установил python2.7 и python3.1 в win7 и запускаю скрипт в оболочке python2.7.

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Я не знаю, почему это работает на C:\.Это должно потерпеть неудачу в любом случае.Вы импортируете что-то из urllib.Ваш скрипт называется urllib.Текущий каталог находится перед каталогами стандартной библиотеки, поэтому вы импортируете себя.Только потому, что импорт «кэшируется» (второй import x в том же процессе интерпретатора просто дает ссылку на уже импортированный модуль, а не загружает его снова), это не приводит к бесконечному циклу.Конечно, в вашем модуле нет ничего, входящего в пакет stdlib urllib, например, нет urlopen.

0 голосов
/ 28 мая 2011

В Python 3 многие модули были реорганизованы.Один из них оказывается urllib.Чтобы заставить приведенный выше код работать в Python 3, вам нужно сделать:

import urllib.request
url = "http://www.google.com"
f = urllib.request.urlopen(url).read()
print(f)

Edit:

Вы также заметите, что в Python 3 вы должны использоватькруглые скобки print.Список изменений с Python 2.x на 3.x см. В этой документации

Если вы не пытаетесь запустить этот код в Python 3.1, а в 2.7, то кажется, чтоваш «раздел D» указывает на вашу установку Python 3.1, тогда как ваш «раздел C» указывает на 2.7.Python 2.x и 3.x обычно не совместимы (см. Документацию выше).

...