471

Python オブジェクトが文字列 (通常または Unicode) であるかどうかを確認するにはどうすればよいですか?

4

15 に答える 15

314

パイソン 2

isinstance(obj, basestring)object-to-test に使用しますobj

ドキュメント.

于 2009-08-19T23:53:12.203 に答える
193

パイソン 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 で型をチェックする標準的な方法は何ですか?も参照してください。

于 2009-08-19T23:58:15.033 に答える
16

明示的な型チェックを避けたい場合 (そしてそれを避ける十分な理由があります)、チェックする文字列プロトコルのおそらく最も安全な部分は次のとおりです。

str(maybe_string) == maybe_string

iterable または iterator を反復処理せず、文字列のリストを文字列と呼ばず、stringlikeを文字列として正しく検出します。

もちろん欠点もあります。たとえばstr(maybe_string)、重い計算になる場合があります。よくあることですが、答えは場合によって異なります。

編集: @Tcllがコメントで 指摘しているように、この質問は実際には、ユニコード文字列とバイト文字列の両方を検出する方法を求めています。Python 2 では、非 ASCII 文字を含む Unicode 文字列を例外としてこの回答は失敗し、Python 3 ではFalseすべてのバイト文字列に対して返されます。

于 2016-07-28T12:44:46.970 に答える
5

他の人が言及しているように、私はこれをダックタイピングスタイルで扱うかもしれません. 文字列が実際に文字列であることをどのように確認できますか? まあ、明らかにそれを文字列に変換することによって!

def myfunc(word):
    word = unicode(word)
    ...

引数がすでに文字列または Unicode 型である場合、real_word はその値を変更せずに保持します。渡されたオブジェクトが__unicode__メソッドを実装している場合、それはその Unicode 表現を取得するために使用されます。渡されたオブジェクトを文字列として使用できない場合、unicodeビルトインは例外を発生させます。

于 2009-08-21T17:50:16.583 に答える
0

空の文字列と連結することでテストできます。

def is_string(s):
  try:
    s += ''
  except:
    return False
  return True

編集

これがリストで失敗することを指摘するコメントの後に私の答えを修正する

def is_string(s):
  return isinstance(s, basestring)
于 2013-01-24T14:48:52.797 に答える
-4
if type(varA) == str or type(varB) == str:
    print 'string involved'

EDX から - オンライン コース MITx: 6.00.1x Python を使用したコンピューター サイエンスとプログラミングの概要

于 2014-09-11T23:38:26.480 に答える