Pythonで変数の型があるかどうかを確認する方法があるstring
ようには、:
isinstance(x,int);
整数値の場合?
isinstance(True, int) is True
。
isinstance(x,str)
Python 3では正しいです(strは基本型です)。
Pythonで変数の型があるかどうかを確認する方法があるstring
ようには、:
isinstance(x,int);
整数値の場合?
isinstance(True, int) is True
。
isinstance(x,str)
Python 3では正しいです(strは基本型です)。
回答:
Python 2.xでは、
isinstance(s, basestring)
basestring
およびの抽象スーパークラスです。オブジェクトがインスタンスであるかどうかを試験するために使用することができ、または。str
unicode
str
unicode
Python 3.xでは、正しいテストは
isinstance(s, str)
bytes
クラスはPythonの3の文字列型とはみなされません。
unicode
文字列と見なされるべきオブジェクトが欠落することです。タイプstr
とタイプの両方にunicode
共通の基本クラスbasestring
があり、これがチェック対象です。
basestring = str
。
unicode
と3の互換性については、「six」ライブラリを使用することをお勧めします。(特にisintance(s, six.string_types)
この場合)
私はこれが古いトピックであることを知っていますが、グーグルで最初に表示されたものであり、満足のいく答えが見つからなかったので、今後の参考のためにここに残します。
sixはPython 2および3の互換性ライブラリで、すでにこの問題をカバーしています。その後、次のようなことができます:
import six
if isinstance(value, six.string_types):
pass # It's a string !!
コードを検査すると、次のことがわかります。
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str,
else:
string_types = basestring,
value_is_string = isinstance(value, str if sys.version_info[0] >= 3 else basestring)
、>=
最終的なPython 4以降では、str
文字列のルートクラスが保持されると想定します。
Python 3.xまたはPython 2.7.6
if type(x) == str:
==
は、PEP8によって明示的に推奨されていません。また、「一義的」と見なされることに加えて、いくつかの欠点があります。たとえば、str
文字列と見なされるべきのサブクラスのインスタンスは検出されません。タイプを正確にチェックしstr
、サブクラスを明示的に除外する場合は、を使用しますtype(x) is str
。
型モジュールは、intとstring以外のものをチェックする場合にも存在します。 http://docs.python.org/library/types.html
types.StringTypes
。
以下のより適切な回答に基づいて編集してください。約3つの回答を調べて、ベースストリングのクールさについて調べます。
古い答え:WindowsのすべてのCOM呼び出しを含め、いくつかの場所から取得できるUnicode文字列に注意してください。
if isinstance(target, str) or isinstance(target, unicode):
isinstance()
2番目の引数としてタプルも受け取ります。そのbasestring
ため、存在しなかったとしても、そのまま使用できますisinstance(target, (str, unicode))
。
unicode
定義されていないようです:NameError: name 'unicode' is not defined
以降basestring
のpython3で定義されていない、この小さなトリックは、コード互換性を持たせるために役立つかもしれません。
try: # check whether python knows about 'basestring'
basestring
except NameError: # no, it doesn't (it's Python3); use 'str' instead
basestring=str
その後、Python2とPython3の両方で次のテストを実行できます
isinstance(myvar, basestring)
basestring = (str, bytes)
ユニコードを含むPython 2/3
from __future__ import unicode_literals
from builtins import str # pip install future
isinstance('asdf', str) # True
isinstance(u'asdf', str) # True
type('foo')
ことunicode
のPython 2ではデフォルトで、2つ目のメイクは、str
のインスタンスですunicode
。これらにより、Python 2および3でコードが有効になります。ありがとうございます。
また、変数の型が特定の種類であるかどうかを確認する場合は、変数の型を既知のオブジェクトの型と比較できることにも注意してください。
文字列の場合、これを使用できます
type(s) == type('')
str
ますか?str
2.x から継承しないユニコード文字列はどうですか?isinstance(s, basestring)
2.xまたはisinstance(s, str)
3.xで使用します。
isinstance()
サブクラス(これも文字列であり、特殊化されている)をtype('')
許可str
します。使用できるだけで型がシングルトンの場合、追加の呼び出しは冗長であるためtype(s) is str
、より効率的なテストになります。
ここには他の人からの良い提案がたくさんありますが、クロスプラットフォームの良い要約はありません。以下は、あらゆるPythonプログラムに適したものです。
def isstring(s):
# if we use Python 3
if (sys.version_info[0] >= 3):
return isinstance(s, str)
# we use Python 2
return isinstance(s, basestring)
この関数でisinstance(object, classinfo)
は、str
Python 3 basestring
とPython 2のどちらの入力かを確認するために使用します。
>=
ます。少なくとも検討してください。
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'
isinstance(a, str) or isinstance(a, unicode)
Trueを返します
type(a) in [str, unicode]
Trueを返します
これらの要件とともに、Python 2とPython 3の両方をサポートするための私の答えは次のとおりです。
six
達成しようとしていることを隠してしまう傾向があるため、類似のcompatモジュールの使用は避けてください。import sys
PY2 = sys.version_info.major == 2
# Check if string (lenient for byte-strings on Py2):
isinstance('abc', basestring if PY2 else str)
# Check if strictly a string (unicode-string):
isinstance('abc', unicode if PY2 else str)
# Check if either string (unicode-string) or byte-string:
isinstance('abc', basestring if PY2 else (str, bytes))
# Check for byte-string (Py3 and Py2.7):
isinstance('abc', bytes)
外部ライブラリに依存したくない場合、これはPython 2.7以降とPython 3の両方で機能します(http://ideone.com/uB4Kdc):
# your code goes here
s = ["test"];
#s = "test";
isString = False;
if(isinstance(s, str)):
isString = True;
try:
if(isinstance(s, basestring)):
isString = True;
except NameError:
pass;
if(isString):
print("String");
else:
print("Not String");
s = '123'
issubclass(s.__class__, str)
これが私のやり方です:
if type(x) == type(str()):
type(str())
非常に遠回りな言い方str
です。タイプはシングルトンなのでtype(x) is str
、より効率的です。isinstance()
のサブクラスを無視する十分な理由がない限り、代わりに使用する必要がありstr
ます。
>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True
type(thing).__name__ == 'str'
を超えますtype(thing) == str
かisinstance(thing, str)
?またunicode
、最新バージョンのPythonには存在しません。