Python: urllib.quote'u içe aktarma


110

Kullanmak istiyorum urllib.quote(). Ancak python (python3) modülü bulamıyor. Diyelim ki, şu kod satırına sahibim:

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

Urllib.quote'u nasıl içe aktarırım?

import urllibya da import urllib.quoteher ikisi de verir

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

Kafamı karıştıran şey, bunun urllib.requestüzerinden erişilebilir olmasıimport urllib.request

Yanıtlar:



54

Hem Python 2.x hem de 3.x'i işlemeniz gerekiyorsa, istisnayı yakalayabilir ve alternatifi yükleyebilirsiniz.

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

Ayrıca sarıcı piton uyumluluk kullanabilirsiniz altı bu işlemek için.

from six.moves.urllib.parse import quote

1
Daha ileriye bakmalısın. Python3 ve 2.7 hariç varsayalım. deneyin: urllib.parse'ı urlparse olarak içe aktarın ImportError: urlparse'dan içe aktarma urlparse # python 2.7.11
Lincoln Randall McFarland

@LincolnRandallMcFarland Bahsettiğiniz şey bu kadar alakasız bir mikro optimizasyon. Gelecekte projede Python 2.X desteğini tamamen bırakmayı zorlaştırmaz veya kolaylaştırmaz.
eandersson

Bir istisna atmayı ve bir istisnayı yakalamayı en yaygın kullanım durumunuzun standart içe aktarma süreci haline getirmek istiyorsanız, çünkü bu benim saatimde bir döngü değildir, ancak ne yaptığınızı bilin: istisnalar istisnai olmalıdır. Çalışmasını sağlamak ile daha iyi hale getirmek arasındaki fark budur.
Lincoln Randall McFarland

Bu çok anlamsız bir tartışma. Her ikisi de geçerlidir ... Python 3 istisnasını yakalarsanız, o zaman Python 2.7 kitaplığını içe aktarmayı deneyin, ancak bazı nedenlerden dolayı, atılan istisna, Python 2.7 kitaplığının eksik olduğunu söyleyecektir. Çok kafa karıştırıcı. Gerçekte, istisnaları bu kadar önemsiyorsanız, bunun üstesinden gelmenin daha iyi yolları vardır, örneğin bir istisnaya güvenmek yerine altı veya Python sürümünü kontrol etme. ama gerçekte bu kadar anlamsız bir şeyi bu kadar önemsiyorsanız, Python 2'nin geriye dönük uyumluluğunu hiç korumamalısınız çünkü zaten bu yıl EOL olacak.
eandersson

14

urllib, Python3'te bazı değişikliklerden geçti ve artık ayrıştırma alt modülünden içe aktarılabilir

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

4

İstisnaları kullanmadan bunu böyle halletiyorum.

import sys
if sys.version_info.major > 2:  # Python 3 or later
    from urllib.parse import quote
else:  # Python 2
    from urllib import quote
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.