Python:导入 urllib.quote
Posted
技术标签:
【中文标题】Python:导入 urllib.quote【英文标题】:Python: Importing urllib.quote 【发布时间】:2015-10-27 21:42:49 【问题描述】:我想使用urllib.quote()
。但是 python (python3) 没有找到该模块。
假设,我有这行代码:
print(urllib.quote("châteu", safe=''))
如何导入 urllib.quote?
import urllib
或
import urllib.quote
都给了
AttributeError: 'module' object has no attribute 'quote'
让我困惑的是urllib.request
可以通过import urllib.request
访问
【问题讨论】:
【参考方案1】:在 Python 3.x 中,需要导入urllib.parse.quote
:
>>> import urllib.parse
>>> urllib.parse.quote("châteu", safe='')
'ch%C3%A2teu'
根据Python 2.x urllib
module documentation:
注意
urllib
模块已被拆分为多个部分,并在 Python 3 中重命名为urllib.request
、urllib.parse
和urllib.error
。
【讨论】:
safe = ''
表示什么?
@ajinzrathod,我来自 OP 的代码。根据documentation,The optional safe parameter specifies additional ASCII characters that should not be quoted — its default value is '/'.
->/
默认不被引用,而safe=''
,/
被引用为'%2F'
。
谢谢一百万。【参考方案2】:
urllib 在 Python3 中经历了一些变化,现在可以从 parse 子模块中导入
>>> from urllib.parse import quote
>>> quote('"')
'%22'
【讨论】:
【参考方案3】:如果您需要同时处理 Python 2.x 和 3.x,您可以捕获异常并加载替代方案。
try:
from urllib import quote # Python 2.X
except ImportError:
from urllib.parse import quote # Python 3+
您也可以使用 python 兼容性包装器six 来处理这个问题。
from six.moves.urllib.parse import quote
【讨论】:
你应该更具前瞻性。假设 python3 和 2.7 除外。尝试: import urllib.parse as urlparse except ImportError: from urlparse import urlparse # python 2.7.11 @LincolnRandallMcFarland 你在说的是这样一个无关紧要的微优化。将来在项目中完全放弃对 Python 2.X 的支持不会变得更加困难或容易。 如果你想让抛出和捕获异常成为你最常见用例的标准导入过程,只是因为......,我的时钟没有周期,但知道你在做什么:异常应该是例外。这是让它发挥作用和让它变得更好之间的区别。 这是一个毫无意义的讨论。两者都是有效的......如果您捕获 Python 3 异常然后尝试导入 Python 2.7 库,但由于某种原因两者都缺少抛出的异常会说它缺少 Python 2.7 库。很混乱。实际上,如果您非常关心异常,则有更好的方法来处理此问题,例如六或检查Python版本而不是依赖异常。但实际上,如果你那么在意如此无意义的事情,那么你根本不应该保持 Python 2 的向后兼容性,因为无论如何它今年都会停产。【参考方案4】:这就是我的处理方式,不使用异常。
import sys
if sys.version_info.major > 2: # Python 3 or later
from urllib.parse import quote
else: # Python 2
from urllib import quote
【讨论】:
不使用异常没有任何好处。恰恰相反:如果实际上性能更高,则使用异常。【参考方案5】:使用six
:
from six.moves.urllib.parse import quote
six
将简化 Python 2 和 Python 3 之间的兼容性问题,例如不同的导入路径。
【讨论】:
以上是关于Python:导入 urllib.quote的主要内容,如果未能解决你的问题,请参考以下文章