Python: importation de urllib.quote


110

Je voudrais utiliser urllib.quote(). Mais python (python3) ne trouve pas le module. Supposons que j'ai cette ligne de code:

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

Comment importer urllib.quote?

import urllibou les import urllib.quotedeux donnent

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

Ce qui me trouble, c'est qu'il urllib.requestest accessible viaimport urllib.request

Réponses:



54

Si vous avez besoin de gérer à la fois Python 2.x et 3.x, vous pouvez intercepter l'exception et charger l'alternative.

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

Vous pouvez également utiliser le wrapper de compatibilité python six pour gérer cela.

from six.moves.urllib.parse import quote

1
Vous devriez être plus tourné vers l'avenir. Supposons python3 et sauf 2.7. try: import urllib.parse as urlparse sauf ImportError: from urlparse import urlparse # python 2.7.11
Lincoln Randall McFarland

@LincolnRandallMcFarland Ce dont vous parlez est une micro-optimisation tellement hors de propos. Il n'est pas plus difficile ni plus facile de supprimer complètement la prise en charge de Python 2.X dans le projet à l'avenir.
eandersson

Si vous voulez faire de lancer et attraper une exception le processus d'importation standard de votre cas d'utilisation le plus courant simplement parce que ..., ce n'est pas un cycle hors de mon horloge, mais sachez ce que vous faites: les exceptions devraient être exceptionnelles. C'est la différence entre le faire fonctionner et le rendre meilleur.
Lincoln Randall McFarland le

C'est une discussion tellement dénuée de sens. Les deux sont valides ... si vous attrapez l'exception Python 3, essayez d'importer la bibliothèque Python 2.7, mais pour une raison quelconque, les deux manquent l'exception lancée dira qu'il manque la bibliothèque Python 2.7. Très perturbant. En réalité, si vous vous souciez autant des exceptions, il existe de meilleures façons de gérer cela, par exemple six ou vérifier la version Python au lieu de compter sur une exception. mais en réalité, si vous vous souciez autant de quelque chose d'aussi insignifiant, vous ne devriez pas du tout garder la rétrocompatibilité de Python 2 parce que c'est EOL cette année de toute façon.
eandersson le

14

urllib a subi quelques modifications dans Python3 et peut maintenant être importé depuis le sous-module d'analyse

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

4

C'est ainsi que je gère cela, sans utiliser d'exceptions.

import sys
if sys.version_info.major > 2:  # Python 3 or later
    from urllib.parse import quote
else:  # Python 2
    from urllib import quote
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.