Python 3.5.1 urllib 没有属性请求

Posted

技术标签:

【中文标题】Python 3.5.1 urllib 没有属性请求【英文标题】:Python 3.5.1 urllib has no attribute request 【发布时间】:2016-08-30 17:49:43 【问题描述】:

我试过了

import urllib.request

import urllib

我的 urllib 的路径是 /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/__init__.py

我想知道urlopen在哪里,还是我的python模块指向了错误的文件?

【问题讨论】:

有趣。为我工作(我有相同的路径)。你从os.listdir(os.path.dirname(urllib.__file__)) 得到什么? 那是['__init__.py', '__pycache__', 'error.py', 'parse.py', 'request.py', 'response.py', 'robotparser.py'] 听起来你的道路是交叉的。试试import sys;print(sys.path),看看有没有出现python 2相关的路径?如果是这样,也许你在你的 shell 环境中的 PYTHONPATH 中设置了一些不寻常的东西? 而且,作为记录,import urllib.request; urllib.request.urlopen 对我来说很好用。 import urllib; urllib.request.urlopen 会提升您所看到的 AttributeError 不知怎的,伙计们……import urllib; from urllib.request import urlopen这有点奇怪,但它奏效了! 【参考方案1】:

根据this,您必须使用以下内容:

import urllib.request

原因是:

对于像这样的包,您有时需要显式导入 你想要的一块。这样, urllib 模块就不必加载 一切都只是因为你想要一小部分。

【讨论】:

我不知道为什么,但这对我不起作用。我正在使用 python 3.5.2 将 import urllib 更改为 import urllib.request ,仅此而已,它又开始工作了 仍然不太清楚为什么它会以这种方式工作,但这确实有效,谢谢。 一些有趣的背景资料可以在here找到。这同样适用于 email.message 子模块。基本上,os.path 是 stdlib 中唯一违反此规则的子模块。【参考方案2】:

这样使用

import urllib.request
urllib.request.urlopen('http://216.58.192.142',timeout=1)

【讨论】:

如果有人像我一样将代码从 python2.7 迁移到 python3,以这种方式将以前使用的 urllib2 更改为 urllib 也会有所帮助!【参考方案3】:

在 python 3.6.x 中这对我有用,这样我根本不需要更改代码:

import urllib.request as urllib

【讨论】:

如果其他人需要编辑您的代码,这将导致混乱。 可能不是“将”而是“可能”,但我同意,如果您编写的代码可能由其他人管理,最好对所使用的解决方法写评论,因此它不会附带维护者的惊喜。【参考方案4】:

在我的情况下,我创建了一个文件“http.py”,因此将该名称更改为“http_my.py”解决了这个问题。与@JohnnyFun 相同

【讨论】:

哦该死的,这救了我。是什么赋予了? xD【参考方案5】:

如果以上方法都不适合您,请尝试重命名您的 python 模块。

在我的特定情况下,问题在于我正在运行的文件名为 http.py。一旦我将名称更改为test-http.py,导入 urllib.request 解决了错误AttributeError: module 'urllib' has no attribute 'request'

我注意到内部包试图获取一个名为 http 的模块的异常跟踪更进一步,所以猜测我的模块的名称是 wonkin 的东西......

【讨论】:

这解决了一个问题!如果您在工作目录中的任何位置都有名为 http.py 的文件,也可能导致此错误。请注意,这可能会破坏其他依赖 urllib ex 的库。 http.client【参考方案6】:

我有同样的问题。我正在使用 Python 3.8.2。

我检查了位于 /usr/lib/python3.8/urllib/ 的 _init_.py 文件,它是空的,这意味着您不能仅使用 import urllib 进行完全限定访问.在这种情况下,您必须使用 import urllib.request。

【讨论】:

【参考方案7】:
import urllib.request as urllib

然后在代码中调用urlopen函数

示例:

test = urllib.urlopen("----")

【讨论】:

以上是关于Python 3.5.1 urllib 没有属性请求的主要内容,如果未能解决你的问题,请参考以下文章

Python 3 urllib json AttributeError:“HTTPResponse”对象没有属性“type”

urllib2.HTTPError: HTTP Error 403: Forbidden 请高手指点,python菜鸟一枚

AttributeError:模块 'urllib' 没有属性 'parse'

python如何实现文件的下载,请尽量详细,高分!!!

python3.5中没有urllib2怎么处理?

python3.4没有 urllib2