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

Hon*_*jie 29 python urllib python-3.5

python 3.5.2

代码1

import urllib
s = urllib.parse.quote('"')
print(s) 
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误:

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

代码2

from urllib.parse import quote  
# import urllib
# s = urllib.parse.quote('"')
s = quote('"')
print(s) 
Run Code Online (Sandbox Code Playgroud)

有用...

CODE3

from flask import Flask
# from urllib.parse import quote  
# s = quote('"')
import urllib
s = urllib.parse.quote('"')
print(s) 
Run Code Online (Sandbox Code Playgroud)

它也有效.因为烧瓶?

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

Niz*_*med 18

urllib包仅用作命名空间.还有在其他模块urllibrequestparse.
对于优化,导入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"])'
Run Code Online (Sandbox Code Playgroud)


Iva*_*iev 14

要使代码1工作,您需要导入urllib.parse模块,而不是函数quote.这样您可以quote使用完整模块限定符来引用该函数.使用此方法,您可以使用parse模块中定义的任何函数:

import urllib.parse
s = urllib.parse.quote('"')
print(s)
Run Code Online (Sandbox Code Playgroud)

代码2有效,因为您只导入parse函数并在没有模块限定符的情况下引用它,因为它不是在模块的上下文中导入的.使用此方法,您只能使用parse模块中显式导入的函数.

代码3工作,因为flask隐式导入urllib.parse模块.该parse模块在urllib模块上下文中可用.导入后urllib,urllib.parse随时可用,您可以像在代码1中一样使用它


Abu*_*oeb 6

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

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

# For Python 3.x
urllib.parse.quote_plus(query)
Run Code Online (Sandbox Code Playgroud)

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