Python オブジェクトが文字列 (通常または Unicode) であるかどうかを確認するにはどうすればよいですか?
15 に答える
パイソン 2
オブジェクトo
が文字列型のサブクラスの文字列型であるかどうかを確認するには:
isinstance(o, basestring)
str
との両方unicode
が のサブクラスであるためですbasestring
。
のタイプo
が正確に であるかどうかを確認するにはstr
:
type(o) is str
o
が のインスタンスstr
またはサブクラスであるかどうかを確認するにはstr
:
isinstance(o, str)
str
に置き換えると、上記は Unicode 文字列でも機能しますunicode
。
ただし、明示的な型チェックをまったく行う必要がない場合もあります。「ダックタイピング」はあなたのニーズに合うかもしれません。http://docs.python.org/glossary.html#term-duck-typingを参照してください。
Python で型をチェックする標準的な方法は何ですか?も参照してください。
明示的な型チェックを避けたい場合 (そしてそれを避ける十分な理由があります)、チェックする文字列プロトコルのおそらく最も安全な部分は次のとおりです。
str(maybe_string) == maybe_string
iterable または iterator を反復処理せず、文字列のリストを文字列と呼ばず、stringlikeを文字列として正しく検出します。
もちろん欠点もあります。たとえばstr(maybe_string)
、重い計算になる場合があります。よくあることですが、答えは場合によって異なります。
編集: @Tcllがコメントで 指摘しているように、この質問は実際には、ユニコード文字列とバイト文字列の両方を検出する方法を求めています。Python 2 では、非 ASCII 文字を含む Unicode 文字列を例外としてこの回答は失敗し、Python 3 ではFalse
すべてのバイト文字列に対して返されます。
他の人が言及しているように、私はこれをダックタイピングスタイルで扱うかもしれません. 文字列が実際に文字列であることをどのように確認できますか? まあ、明らかにそれを文字列に変換することによって!
def myfunc(word):
word = unicode(word)
...
引数がすでに文字列または Unicode 型である場合、real_word はその値を変更せずに保持します。渡されたオブジェクトが__unicode__
メソッドを実装している場合、それはその Unicode 表現を取得するために使用されます。渡されたオブジェクトを文字列として使用できない場合、unicode
ビルトインは例外を発生させます。
空の文字列と連結することでテストできます。
def is_string(s):
try:
s += ''
except:
return False
return True
編集:
これがリストで失敗することを指摘するコメントの後に私の答えを修正する
def is_string(s):
return isinstance(s, basestring)
if type(varA) == str or type(varB) == str:
print 'string involved'
EDX から - オンライン コース MITx: 6.00.1x Python を使用したコンピューター サイエンスとプログラミングの概要