Python: Mengimpor urllib.quote


110

Saya ingin menggunakan urllib.quote(). Tapi python (python3) tidak menemukan modulnya. Misalkan, saya memiliki baris kode ini:

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

Bagaimana cara mengimpor urllib.quote?

import urllibatau import urllib.quotekeduanya memberi

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

Yang membingungkan saya adalah itu urllib.requestdapat diakses melaluiimport urllib.request

Jawaban:



54

Jika Anda perlu menangani Python 2.x dan 3.x Anda dapat menangkap pengecualian dan memuat alternatifnya.

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

Anda juga bisa menggunakan pembungkus kompatibilitas python enam untuk menangani ini.

from six.moves.urllib.parse import quote

1
Anda harus lebih melihat ke depan. Asumsikan python3 dan kecuali 2.7. coba: impor urllib.parse sebagai urlparse kecuali ImportError: dari urlparse import urlparse # python 2.7.11
Lincoln Randall McFarland

@LincolnRandallMcFarland Apa yang Anda bicarakan adalah optimasi mikro yang tidak relevan. Tidak sulit atau mudah untuk melepaskan dukungan Python 2.X sepenuhnya dalam proyek di masa mendatang.
eandersson

Jika Anda ingin membuat pengecualian sebagai proses impor standar dari kasus penggunaan Anda yang paling umum hanya karena ..., ini bukan siklus dari jam saya tetapi tahu apa yang Anda lakukan: pengecualian harus menjadi pengecualian. Inilah perbedaan antara membuatnya bekerja dan membuatnya lebih baik.
Lincoln Randall McFarland

Ini adalah diskusi yang tidak berarti. Keduanya valid ... jika Anda menangkap pengecualian Python 3 maka coba impor pustaka Python 2.7, tetapi untuk beberapa alasan keduanya kehilangan pengecualian yang dilemparkan akan mengatakan bahwa itu kehilangan pustaka Python 2.7. Sangat membingungkan. Pada kenyataannya, jika Anda sangat peduli tentang pengecualian, ada cara yang lebih baik untuk menangani ini, misalnya enam atau memeriksa versi Python daripada mengandalkan pengecualian. tetapi pada kenyataannya jika Anda sangat peduli tentang sesuatu yang sangat tidak berarti, Anda tidak boleh menyimpan kompatibilitas mundur Python 2 sama sekali karena ini adalah EOL tahun ini.
eandersson

14

urllib mengalami beberapa perubahan pada Python3 dan sekarang dapat diimpor dari submodul parse

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

4

Beginilah cara saya menangani ini, tanpa menggunakan pengecualian.

import sys
if sys.version_info.major > 2:  # Python 3 or later
    from urllib.parse import quote
else:  # Python 2
    from urllib import quote
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.