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包仅用作命名空间.还有在其他模块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"])'
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中一样使用它
我遇到了类似的问题,并意识到这是一个版本问题。所以这是我的解决方案,以防它帮助任何人:
# 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