Python : urllib.quote 가져 오기


109

을 (를) 사용하고 싶습니다 urllib.quote(). 그러나 파이썬 (python3)은 모듈을 찾지 못합니다. 다음 코드 줄이 있다고 가정합니다.

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

urllib.quote를 어떻게 가져 옵니까?

import urllib또는 import urllib.quote둘 다 줄

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

나를 혼란스럽게하는 urllib.request것은import urllib.request

답변:


180

Python 3.x에서는 다음을 가져와야합니다 urllib.parse.quote.

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

Python 2.x urllib모듈 문서 에 따르면 :

노트

urllib모듈 부품으로 분할되어하고 파이썬 3으로 변경하고있다 urllib.request, urllib.parse그리고 urllib.error.


54

Python 2.x와 3.x를 모두 처리해야하는 경우 예외를 포착하고 대안을로드 할 수 있습니다.

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

이것을 처리하기 위해 파이썬 호환성 래퍼 6 을 사용할 수도 있습니다 .

from six.moves.urllib.parse import quote

1
당신은 더 기대해야합니다. python3을 가정하고 2.7을 제외합니다. 시도 : ImportError를 제외하고 urlparse 등의 수입 urllib.parse : urlparse 수입 urlparse 번호 파이썬에서 2.7.11
링컨 랜달 맥팔랜드에게

@LincolnRandallMcFarland 당신이 말하는 것은 매우 무관 한 마이크로 최적화입니다. 앞으로 프로젝트에서 Python 2.X 지원을 완전히 중단하는 것이 더 어렵거나 쉽지 않습니다.
eandersson

예외를 던지고 캐치하기를 가장 일반적인 사용 사례의 표준 가져 오기 프로세스로 만들고 싶다면 ..., 내 시계의주기는 아니지만 수행중인 작업을 알고 있습니다. 예외는 예외 여야합니다. 그것이 작동하도록 만드는 것과 더 나은 것을 만드는 것의 차이입니다.
Lincoln Randall McFarland

이것은 무의미한 토론입니다. 둘 다 유효합니다 ... Python 3 예외를 포착하면 Python 2.7 라이브러리를 가져 오십시오. 그러나 어떤 이유로 두 가지 모두 예외가 발생하면 Python 2.7 라이브러리가 누락되었다고 표시됩니다. 매우 혼란 스럽습니다. 실제로 예외에 대해 그렇게 신경 쓰는 경우이를 처리하는 더 좋은 방법이 있습니다. 예를 들어 6 개 또는 예외에 의존하는 대신 Python 버전을 확인합니다. 그러나 실제로 의미없는 것에 대해 그렇게 신경을 쓴다면, 어쨌든 올해 EOL이기 때문에 Python 2 이전 버전과의 호환성을 유지해서는 안됩니다.
eandersson

14

urllib는 Python3에서 몇 가지 변경 사항을 거쳤으며 이제 parse 하위 모듈에서 가져올 수 있습니다.

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

4

이것은 예외를 사용하지 않고 이것을 처리하는 방법입니다.

import sys
if sys.version_info.major > 2:  # Python 3 or later
    from urllib.parse import quote
else:  # Python 2
    from urllib import quote
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.