Python: urllib.quote importieren

109

Ich würde gerne verwenden urllib.quote(). Python (python3) findet das Modul jedoch nicht. Angenommen, ich habe diese Codezeile:

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

Wie importiere ich urllib.quote?

import urlliboder import urllib.quotebeide geben

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

Was mich verwirrt ist, dass urllib.requestüber zugänglich istimport urllib.request

imrek
quelle

Antworten:

180

In Python 3.x müssen Sie Folgendes importieren urllib.parse.quote:

>>> import urllib.parse
>>> urllib.parse.quote("châteu", safe='')
'ch%C3%A2teu'

Gemäß der Dokumentation zum Python 2.x- urllibModul :

HINWEIS

Das urllibModul wird in Teile aufgeteilt worden und umbenannt in Python 3 zu urllib.request, urllib.parseund urllib.error.

falsetru
quelle
54

Wenn Sie sowohl Python 2.x als auch 3.x verarbeiten müssen, können Sie die Ausnahme abfangen und die Alternative laden.

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

Sie können auch den Python-Kompatibilitäts-Wrapper 6 verwenden , um dies zu handhaben.

from six.moves.urllib.parse import quote
eandersson
quelle
Sie sollten vorausschauender sein. Angenommen, Python3 und außer 2.7. versuchen Sie: importieren Sie urllib.parse als urlparse außer ImportError: von urlparse importieren Sie urlparse # python 2.7.11
Lincoln Randall McFarland
@LincolnRandallMcFarland Was Sie sprechen, ist eine so irrelevante Mikrooptimierung. Es macht es nicht schwieriger oder einfacher, die Python 2.X-Unterstützung in Zukunft vollständig im Projekt zu löschen.
eandersson
Wenn Sie das Auslösen und Abfangen einer Ausnahme zum Standardimportprozess Ihres häufigsten Anwendungsfalls machen möchten, nur weil ... es keine Zyklen von meiner Uhr entfernt sind, sondern wissen, was Sie tun: Ausnahmen sollten außergewöhnlich sein. Es ist der Unterschied zwischen dem Funktionieren und dem Verbessern.
Lincoln Randall McFarland
Dies ist eine so bedeutungslose Diskussion. Beide sind gültig ... Wenn Sie die Python 3-Ausnahme abfangen, versuchen Sie, die Python 2.7-Bibliothek zu importieren. Aus irgendeinem Grund fehlt beiden. Die ausgelöste Ausnahme besagt, dass die Python 2.7-Bibliothek fehlt. Sehr verwirrend. In der Realität gibt es bessere Möglichkeiten, um mit Ausnahmen umzugehen, z. B. sechs oder die Überprüfung der Python-Version, anstatt sich auf eine Ausnahme zu verlassen. Wenn Sie sich jedoch so sehr für etwas so Bedeutungsloses interessieren, sollten Sie Python 2 überhaupt nicht abwärtskompatibel halten, da es dieses Jahr sowieso EOL ist.
eandersson
14

urllib hat einige Änderungen in Python3 durchlaufen und kann jetzt aus dem Parse-Submodul importiert werden

>>> from urllib.parse import quote  
>>> quote('"')                      
'%22'                               
Justin Fay
quelle
4

So gehe ich damit um, ohne Ausnahmen zu verwenden.

import sys
if sys.version_info.major > 2:  # Python 3 or later
    from urllib.parse import quote
else:  # Python 2
    from urllib import quote
Yutenji
quelle