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 urllibimport 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.requesturllib.parseurllib.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的主要内容,如果未能解决你的问题,请参考以下文章

python aes模块怎么导入

python如何导入数据

Python 包内的导入问题(绝对导入和相对导入)

python中模块包无法导入import问题

Python的错误导入已经安装模块问题,怎么解决

python如何导入numpy