Python: Importando urllib.quote


109

Me gustaría usar urllib.quote(). Pero python (python3) no encuentra el módulo. Supongamos que tengo esta línea de código:

print(urllib.quote("châteu", safe=''))

¿Cómo importo urllib.quote?

import urllibo import urllib.quoteambos dan

AttributeError: 'module' object has no attribute 'quote'

Lo que me confunde es que urllib.requestse puede acceder a través deimport urllib.request

Respuestas:



54

Si necesita manejar Python 2.xy 3.x, puede detectar la excepción y cargar la alternativa.

try:
    from urllib import quote  # Python 2.X
except ImportError:
    from urllib.parse import quote  # Python 3+

También puede usar el contenedor de compatibilidad de Python seis para manejar esto.

from six.moves.urllib.parse import quote

Debería mirar más hacia el futuro. Suponga python3 y excepto 2.7. intente: importar urllib.parse como urlparse excepto ImportError: from urlparse import urlparse # python 2.7.11
Lincoln Randall McFarland

@LincolnRandallMcFarland De lo que estás hablando es de una micro optimización tan irrelevante. No hace que sea más difícil o más fácil eliminar completamente el soporte de Python 2.X en el proyecto en el futuro.
eandersson

Si desea hacer que lanzar y capturar una excepción sea el proceso de importación estándar de su caso de uso más común solo porque ..., no hay ciclos fuera de mi reloj, pero sepa lo que está haciendo: las excepciones deben ser excepcionales. Es la diferencia entre hacerlo funcionar y hacerlo mejor.
Lincoln Randall McFarland

Esta es una discusión sin sentido. Ambos son válidos ... si detecta la excepción de Python 3, intente importar la biblioteca de Python 2.7, pero por alguna razón a ambos les falta la excepción lanzada dirá que falta la biblioteca de Python 2.7. Muy confuso. En realidad, si le importan tanto las excepciones, hay mejores formas de manejar esto, por ejemplo, seis o comprobar la versión de Python en lugar de confiar en una excepción. pero en realidad, si te importa tanto algo tan insignificante, no deberías mantener la compatibilidad con versiones anteriores de Python 2 porque de todos modos es EOL este año.
eandersson

14

urllib pasó por algunos cambios en Python3 y ahora se puede importar desde el submódulo parse

>>> from urllib.parse import quote  
>>> quote('"')                      
'%22'                               

4

Así es como manejo esto, sin usar excepciones.

import sys
if sys.version_info.major > 2:  # Python 3 or later
    from urllib.parse import quote
else:  # Python 2
    from urllib import quote
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.