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

时间:2017-01-06 08:19:37

标签: python urllib python-3.5

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) 

也有效。因为烧瓶?

为什么我不再有错误?这是一个错误吗?

3 个答案:

答案 0 :(得分:12)

urllib包仅用作命名空间。 urllib下的其他模块包括requestparse 对于优化,导入urllib不会导入其下的其他模块。因为这样做会占用处理器周期和内存,但人们可能不需要那些其他模块 urllib下的各个模块必须根据需要单独导入。

尝试这些,第一个失败但第二个失败,因为导入flaskflask导入urllib.parse

python3 -c 'import urllib, sys;print(sys.modules["urllib.parse"])'
python3 -c 'import flask, sys;print(sys.modules["urllib.parse"])'

答案 1 :(得分:10)

要使代码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

中使用它

答案 2 :(得分:2)

我遇到了类似的问题,并意识到这是一个版本问题。所以这是我的解决方案,以防万一:

# For Python 2.X
urllib.quote_plus(query)

# For Python 3.x
urllib.parse.quote_plus(query)

参考https://github.com/schollz/playlistfromsong/issues/36