Python:urllib.quoteのインポート


109

使用したいurllib.quote()です。しかし、python(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

回答:



54

Python 2.xと3.xの両方を処理する必要がある場合は、例外をキャッチして代替をロードできます。

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

python互換ラッパー6を使用してこれを処理することもできます。

from six.moves.urllib.parse import quote

あなたはもっと前向きである必要があります。2.7以外のpython3を想定します。try:importErrorを除くurlparseとしてurllib.parseをインポートします:from urlparse import urlparse#python 2.7.11
Lincoln Randall McFarland

@LincolnRandallMcFarlandあなたが話しているのは、そのような無関係なマイクロ最適化です。今後プロジェクトでPython 2.Xのサポートを完全に廃止することは、難しくも簡単でもありません。
eandersson '31 / 12/19

例外をスローしてキャッチすることを、最も一般的なユースケースの標準のインポートプロセスにしたい場合は、それだけで、私の時計のサイクルから外れることはありません。それはそれを機能させることとそれをより良くすることの違いです。
リンカーンランドールマクファーランド

これはとても意味のない議論です。どちらも有効です... Python 3の例外をキャッチした場合は、Python 2.7ライブラリをインポートしてみてください。ただし、何らかの理由で両方の例外が欠落しているため、Python 2.7ライブラリがないと表示されます。とても紛らわしい。実際には、例外を重視する場合、これに対処するためのより良い方法があります。たとえば、例外を使用する代わりに、6つまたはPythonのバージョンをチェックします。しかし実際には、あまり意味のないことを気にかけているのであれば、Python 2の下位互換性を維持するべきではありません。なぜなら、今年はとにかくEOLだからです。
eandersson

14

urllibはPython3でいくつかの変更を経て、解析サブモジュールからインポートできるようになりました

>>> 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.