Python: Nhập urllib.quote


109

Tôi muốn sử dụng urllib.quote(). Nhưng python (python3) không tìm thấy mô-đun. Giả sử, tôi có dòng mã này:

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

Làm cách nào để nhập urllib.quote?

import urllibhoặc import urllib.quotecả hai đều cho

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

Điều làm tôi bối rối urllib.requestlà có thể truy cập quaimport urllib.request

Câu trả lời:


180

Trong Python 3.x, bạn cần nhập urllib.parse.quote:

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

Theo tài liệu mô-đun Python 2.xurllib :

GHI CHÚ

Các urllibmô-đun đã được chia thành nhiều phần và đổi tên bằng Python 3 đến urllib.request, urllib.parseurllib.error.


54

Nếu bạn cần xử lý cả Python 2.x và 3.x, bạn có thể bắt ngoại lệ và tải thay thế.

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

Bạn cũng có thể sử dụng trình bao bọc tương thích python sáu để xử lý điều này.

from six.moves.urllib.parse import quote

Bạn nên nhìn về phía trước nhiều hơn. Giả sử python3 và ngoại trừ 2.7. thử: nhập urllib.parse dưới dạng urlparse ngoại trừ ImportError: from urlparse import urlparse # python 2.7.11
Lincoln Randall McFarland

@LincolnRandallMcFarland Những gì bạn đang nói là một tối ưu hóa vi mô không liên quan. Nó làm cho việc bỏ hoàn toàn hỗ trợ Python 2.X trong dự án trong tương lai không khó hoặc dễ dàng hơn.
eandersson

Nếu bạn muốn thực hiện việc ném và bắt một ngoại lệ trở thành quy trình nhập tiêu chuẩn của trường hợp sử dụng phổ biến nhất của bạn chỉ vì ..., nó không có chu kỳ nào khác ngoài đồng hồ của tôi nhưng hãy biết bạn đang làm gì: ngoại lệ phải là ngoại lệ. Đó là sự khác biệt giữa làm cho nó hoạt động và làm cho nó tốt hơn.
Lincoln Randall McFarland

Đây là một cuộc thảo luận vô nghĩa. Cả hai đều hợp lệ ... nếu bạn bắt được ngoại lệ Python 3 thì hãy cố gắng nhập thư viện Python 2.7, nhưng vì lý do nào đó mà cả hai đều thiếu ngoại lệ được ném ra sẽ nói rằng nó thiếu thư viện Python 2.7. Rất bối rối. Trong thực tế, nếu bạn quan tâm nhiều đến các ngoại lệ, có nhiều cách tốt hơn để xử lý điều này, ví dụ: sáu hoặc kiểm tra phiên bản Python thay vì dựa vào một ngoại lệ. nhưng trong thực tế, nếu bạn quan tâm nhiều đến điều gì đó vô nghĩa, bạn không nên giữ khả năng tương thích ngược của Python 2 vì dù sao nó cũng là EOL năm nay.
eandersson

14

urllib đã trải qua một số thay đổi trong Python3 và hiện có thể được nhập từ mô-đun phân tích cú pháp

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

4

Đây là cách tôi xử lý điều này, mà không sử dụng ngoại lệ.

import sys
if sys.version_info.major > 2:  # Python 3 or later
    from urllib.parse import quote
else:  # Python 2
    from urllib import quote
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.