AttributeError:模块 'urllib' 没有属性 'parse'
Posted
技术标签:
【中文标题】AttributeError:模块 \'urllib\' 没有属性 \'parse\'【英文标题】:AttributeError: module 'urllib' has no attribute 'parse'AttributeError:模块 'urllib' 没有属性 'parse' 【发布时间】:2017-05-20 23:26:02 【问题描述】:python 3.5.2
代码 1
import urllib
s = urllib.parse.quote('"')
print(s)
它给出了这个错误:
AttributeError: 模块 'urllib' 没有属性 'parse'
代码 2
from urllib.parse import quote
# import urllib
# s = urllib.parse.quote('"')
s = quote('"')
print(s)
它有效...
code3
from flask import Flask
# from urllib.parse import quote
# s = quote('"')
import urllib
s = urllib.parse.quote('"')
print(s)
它也有效。因为烧瓶?
为什么我没有错误了?是bug吗?
【问题讨论】:
您必须import urllib.parse
。我会假设Flask
也导入urllib.parse
,这就是您的第三个示例有效的原因。
由于某种原因,这在 IPython 中工作得很好,但在 Python 脚本中失败。 $ ipython Python 3.7.1 (default, Dec 13 2018, 11:43:05) Type 'copyright', 'credits' or 'license' for more information IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import urllib In [2]: urllib.parse.quote('foo bar') Out[2]: 'foo%20bar'
。我不确定为什么它在那里工作。
【参考方案1】:
urllib
包仅用作命名空间。 urllib
下还有其他模块,例如 request
和 parse
。
为了优化导入urllib
不会导入它下面的其他模块。因为这样做会消耗处理器周期和内存,但人们可能不需要那些其他模块。urllib
下的各个模块必须根据需要单独导入。
尝试这些,第一个失败,但第二个成功,因为当 flask
被导入时 flask
本身导入 urllib.parse
。
python3 -c 'import urllib, sys;print(sys.modules["urllib.parse"])'
python3 -c 'import flask, sys;print(sys.modules["urllib.parse"])'
【讨论】:
【参考方案2】:要使 代码 1 工作,您需要导入 urllib.parse
模块,而不是函数 quote
。这样您就可以使用完整的模块限定符来引用 quote
函数。通过这种方法,您可以使用parse
模块中定义的任何函数:
import urllib.parse
s = urllib.parse.quote('"')
print(s)
代码 2 有效,因为您只导入 parse
函数并在没有模块限定符的情况下引用它,因为它不是在模块的上下文中导入的。使用这种方法,您只能使用来自 parse
模块的显式导入函数。
代码 3 有效,因为 flask
隐式导入 urllib.parse
模块。 parse
模块在 urllib
模块上下文中可用。导入 urllib
后,urllib.parse
就可以随时使用,您可以像在 代码 1
【讨论】:
【参考方案3】:我遇到了类似的问题,并意识到这是一个版本问题。所以这是我的解决方案,以防它帮助任何人:
# For Python 2.X
urllib.quote_plus(query)
# For Python 3.x
urllib.parse.quote_plus(query)
参考https://github.com/schollz/playlistfromsong/issues/36
【讨论】:
以上是关于AttributeError:模块 'urllib' 没有属性 'parse'的主要内容,如果未能解决你的问题,请参考以下文章
python3 AttributeError: module 'urllib' has no attribute 'urlencode'
Python 3 urllib json AttributeError:“HTTPResponse”对象没有属性“type”
python提示错误“AttributeError: 'module' object has no attribute 'Tk'”是啥原因?