我从github
打开了python代码。我假设它是python2.x
并且在我尝试运行它时遇到了上述错误。从阅读中我看到Python 3已经贬低了urllib
本身并将其替换为包括urllib.request
在内的许多库。
看起来代码是用python 3编写的(来自知道会被赞赏的人的确认。) 在这一点上,我不想转向Python 3 - 我还没有研究它对我现有代码的作用。
认为应该有一个urllib
Python 2
模块,我搜索了Google(使用“python2 urllib下载”)但没找到。 (它可能隐藏在许多答案中,因为urllib
包括下载功能。)我查看了Python27/lib
目录,但没有看到它。
我可以获得在Python27
上运行的此模块的版本吗?在哪里以及如何?
答案 0 :(得分:38)
尝试使用urllib2:
https://docs.python.org/2/library/urllib2.html
此行应该可以替换urlopen:
from urllib2 import urlopen
在Macbook Pro上的Python 2.7中测试
尝试发布相关git的链接。
答案 1 :(得分:8)
而不是使用urllib.request.urlopen()删除对python 2的请求。
urllib.urlopen()您不必在python 2.x中请求您要执行的操作。希望对你有效。 这是使用python 2.7测试我收到相同的错误消息,这解决了它。
答案 2 :(得分:8)
from urllib.request import urlopen, Request
应该解决所有问题
答案 3 :(得分:6)
您可以进行防御性编程,并按以下方式进行导入:
data = urlopen(MIRRORS).read(AMOUNT2READ)
然后在代码中,只需使用:
{{1}}
答案 4 :(得分:2)
你是对的 urllib 和 urllib2 包被分成 urllib.request , urllib.parse 和Python 3.x中的 urllib.error 包。后者的包在Python 2.x中不存在
来自documentation -
urllib模块已拆分为多个部分,并在Python 3中重命名为urllib.request,urllib.parse和urllib.error。
urllib2模块已经拆分为Python 3中名为urllib.request和urllib.error的几个模块。
所以我很确定您下载的代码是为Python 3.x编写的,因为它们使用的是仅存在于Python 3.x中的库。
python中有一个 urllib 包,但它没有 request 子包。另外,假设你做了很多工作,并以某种方式在Python 2.x中提供 request 子包。
你很可能会遇到更多的问题,Python 2.x和Python 3.x之间存在很多不兼容的问题,最终你很可能最终重写了github的至少一半代码(并且最有可能从那里阅读和理解完整的代码)。
即便如此,可能还有其他错误,因为Python 2.x到Python 3.x之间的一些实现细节发生了变化(例如 - 列表理解在Python 3.x中有自己的命名空间)
您最好尝试下载和使用Python 3,而不是尝试为Python 3.x编写与Python 2.x兼容的代码
答案 5 :(得分:2)
更改
from urllib.request import urlopen
到
from urllib import urlopen
我能够通过这样更改来解决此问题。对于Python2.7
macOS10.14
答案 6 :(得分:0)
目前,似乎我可以通过在网址后添加#!/usr/bin/python3
from tkinter import *
from tkinter import ttk
def ChangeLabelText(m):
m.config(text = 'You pressed the button!')
def main():
Root = Tk()
MyLabel = ttk.Label(Root, text = 'The button has not been pressed.')
MyLabel.pack()
MyButton = ttk.Button(Root, text = 'Press Me', command = lambda: ChangeLabelText(MyLabel))
MyButton.pack()
Root.mainloop()
if __name__ == "__main__":
main()
来解决这个问题。