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

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.


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

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'                               

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.