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 模块就不必加载 一切都只是因为你想要一小部分。
【讨论】:
我不知道为什么,但这对我不起作用。我正在使用 python3.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菜鸟一枚