如何检查变量的类型是否为字符串?

时间:2011-01-30 13:32:19

标签: python string variables types

有没有办法检查python中变量的类型是否为string .. like

isinstance(x,int);

表示整数值?

25 个答案:

答案 0 :(得分:912)

在Python 2.x中,你会做

isinstance(s, basestring)

basestringstrunicode的{​​{3}}。它可用于测试对象是str还是unicode的实例。


在Python 3.x中,正确的测试是

isinstance(s, str)

{3}中的bytes类不被视为字符串类型。

答案 1 :(得分:208)

我知道这是一个古老的话题,但是作为Google上显示的第一个主题,鉴于我没有找到任何令人满意的答案,我会留待此处以供将来参考:

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,

答案 2 :(得分:43)

在Python 3.x或Python 2.7.6中

if type(x) == str:

答案 3 :(得分:14)

如果您检查的不仅仅是整数和字符串,那么类型模块也存在。 http://docs.python.org/library/types.html

答案 4 :(得分:14)

你可以这样做:

var2 = 'this is variable #2'
if type(var2) == str:
    print('your variable is a string')
else:
    print('your variable IS NOT a string')

或:

Visitid_fk.         AE.              Med
1.                 Headache.      Aspirin
1.                 Nausea.          Null
3.                 Headache.     Tylenol
4.                 High BP.         Null
4.                 Heartburn.      Zantac
7.                 High BP.          Norvasc

希望这有帮助!

答案 5 :(得分:10)

根据以下更好的答案进行编辑。记下约3个答案,找出基线的凉爽。

旧答案: 注意unicode字符串,你可以从几个地方获得,包括Windows中的所有COM调用。

if isinstance(target, str) or isinstance(target, unicode):

答案 6 :(得分:9)

Python 2/3,包括unicode

from __future__ import unicode_literals
from builtins import str  #  pip install future
isinstance('asdf', str)   #  True
isinstance(u'asdf', str)  #  True

http://python-future.org/overview.html

答案 7 :(得分:9)

因为在Python3中没有定义basestring,所以这个小技巧可能有助于使代码兼容:

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)

答案 8 :(得分:8)

另外我想要注意,如果要检查变量的类型是否是特定类型,可以将变量的类型与已知对象的类型进行比较。

对于字符串,您可以使用此

type(s) == type('')

答案 9 :(得分:8)

其他人提供了很多好的建议,但我没有看到一个好的跨平台摘要。对于任何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)来查看我们的输入是Python 3中的str还是Python 2中的basestring

答案 10 :(得分:6)

所以,

您有很多选项可以检查您的变量是否为字符串:

a = "my string"
type(a) == str # first 
a.__class__ == str # second
isinstance(a, str) # third
str(a) == a # forth
type(a) == type('') # fifth

此订单是出于有目的。

答案 11 :(得分:5)

Python 2的替代方法,不使用basetring:

isinstance(s, (str, unicode))

但由于unicode未定义(在Python 3中),因此仍然无法在Python 3中运行。

答案 12 :(得分:5)

a = '1000' # also tested for 'abc100', 'a100bc', '100abc'

isinstance(a, str) or isinstance(a, unicode)

返回True

type(a) in [str, unicode]

返回True

答案 13 :(得分:4)

这是我支持Python 2和Python 3以及这些要求的答案:

  • 使用最少的Py2 compat代码以Py3代码编写。
  • 稍后删除Py2 compat代码而不会中断。即目标只是删除,不修改Py3代码。
  • 避免使用six或类似的compat模块,因为它们往往会隐藏什么 正在努力实现。
  • 针对潜在Py4的面向未来。
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)

答案 14 :(得分:3)

要测试myvar是否为字符串,也可以使用:

if type(myvar) == str

答案 15 :(得分:1)

如果您不想依赖外部库,这适用于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");

答案 16 :(得分:0)

要检查python中任何变量的类型,可以使用type函数。 例如type('hello')给出输出str

答案 17 :(得分:0)

总结:

如果您同时需要 Python2 和 Python3,并且还想包含 unicode,那么似乎没有一种可移植的方法可以做到这一点。我最终使用了这个习语:

# Near the top of my program
if sys.version_info[0] >= 3:
    basestring = str

然后任何时候我想测试一个对象以查看它是否是一个字符串:

if isinstance(obj, basestring):
    ...

坦率地说,我对 Python3 删除 basestring 和 types.StringTypes 感到有点震惊。我认为没有理由放弃它们,保留它们中的任何一个都可以解决这个问题。

答案 18 :(得分:0)

您只需使用 isinstance 功能即可确保输入数据的格式为 string unicode 。以下示例将帮助您轻松理解。

>>> isinstance('my string', str)
True
>>> isinstance(12, str)
False
>>> isinstance('my string', unicode)
False
>>> isinstance(u'my string',  unicode)
True

答案 19 :(得分:-1)

s = '123'
issubclass(s.__class__, str)

答案 20 :(得分:-3)

varA = "hey"
if type(varA) == str:
   print "it is a string"

答案 21 :(得分:-4)

我就是这样做的:

if type(x) == type(str()):

答案 22 :(得分:-5)

要测试myvar是否为字符串,请使用:

if type(myvar) == type('abc')

答案 23 :(得分:-5)

我见过:

hasattr(s, 'endswith') 

答案 24 :(得分:-6)

>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True