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 下还有其他模块,例如 requestparse。 为了优化导入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'”是啥原因?

Python简单网页爬虫

Python3爬虫获取

urllib3中没有默认密码属性?