Python:导入urllib.quote

Dru*_*ter 91 python import urllib python-3.x

我想用urllib.quote().但是python(python3)没有找到模块.假设,我有这行代码:

print(urllib.quote("châteu", safe=''))
Run Code Online (Sandbox Code Playgroud)

如何导入urllib.quote?

import urllibimport urllib.quote两者都给

AttributeError: 'module' object has no attribute 'quote'
Run Code Online (Sandbox Code Playgroud)

令我困惑的urllib.request是可以通过访问import urllib.request

fal*_*tru 150

在Python 3.x中,您需要导入urllib.parse.quote:

>>> import urllib.parse
>>> urllib.parse.quote("châteu", safe='')
'ch%C3%A2teu'
Run Code Online (Sandbox Code Playgroud)

根据Python 2.x urllib模块文档:

注意

urllib模块已经被分成部分和在Python 3重命名为 urllib.request,urllib.parse,和urllib.error.

  • @ajinzrathod,我来自OP的代码。根据[文档](https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote),`可选的安全参数指定不应引用的附加 ASCII 字符 - 它的默认值值为 '/'.` -> 默认情况下,`/` 不被引用,但使用 `safe=''` 时,`/` 被引用为 `'%2F'`。 (4认同)

ean*_*son 44

如果您需要同时处理Python 2.x和3.x,您可以捕获异常并加载替代方案.

try:
    from urllib import quote  # Python 2.X
except ImportError:
    from urllib.parse import quote  # Python 3+
Run Code Online (Sandbox Code Playgroud)

你也可以使用Python的兼容性包装6来处理这个问题.

from six.moves.urllib.parse import quote
Run Code Online (Sandbox Code Playgroud)

  • 你应该更有前瞻性。假设 python3 和 2.7 除外。尝试: import urllib.parse as urlparse except ImportError: from urlparse import urlparse # python 2.7.11 (2认同)
  • 如果您想将抛出和捕获异常作为最常见用例的标准导入过程,只是因为……,这不是我的时钟周期,但知道您在做什么:异常应该是异常的。这就是让它发挥作用和让它变得更好之间的区别。 (2认同)

Jus*_*Fay 11

urllib在Python3中进行了一些更改,现在可以从parse子模块导入了

>>> from urllib.parse import quote  
>>> quote('"')                      
'%22'                               
Run Code Online (Sandbox Code Playgroud)