2017-01-06 26 views
5

蟒3.5.2AttributeError的:模塊 '的urllib' 沒有屬性 '解析'

代碼1

import urllib 
s = urllib.parse.quote('"') 
print(s) 

它給了這個錯誤:

AttributeError: module 'urllib' has no attribute '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) 

它的作品了。因爲燒瓶?

爲什麼我沒有這個錯誤了?這是一個錯誤?

+2

你必須'導入urllib.parse'。我會假設'Flask'也會導入'urllib.parse',這就是你的第三個例子工作的原因。 – DyZ

回答

4

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"])' 
3

對於碼1工作,你需要導入urllib.parse模塊,而不是功能quote。這樣,您可以使用完整模塊限定符參考quote函數。通過這種方法,你可以使用parse模塊中定義的所有功能:

import urllib.parse 
s = urllib.parse.quote('"') 
print(s) 

碼2部作品,因爲你只導入parse功能,是指它沒有模塊預選賽上,因爲它不是在進口模塊的上下文。通過這種方法,您只能使用parse模塊中明確導入的功能。

代碼3工程,因爲flask隱含導入urllib.parse模塊。 parse模塊在urllib模塊上下文中可用。一旦你導入urlliburllib.parse變得一應俱全,你可以使用它在代碼1

相關問題