首页 文章

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

提问于
浏览
544

有没有办法检查python中变量的类型是否为字符串..就像

isinstance(x,int);

对于整数值?

23 回答

  • 9

    在Python 2.x中,你会这样做

    isinstance(s, basestring)
    

    basestringstrunicodeabstract superclass . 它可用于测试对象是 str 还是 unicode 的实例 .


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

    isinstance(s, str)
    

    bytes 类在Python 3中不被视为字符串类型 .

  • 7

    我知道这是一个古老的话题,但是作为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,
    
  • 8

    在Python 3.x或Python 2.7.6中

    if type(x) == str:
    
  • 8

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

  • 4

    根据以下更好的答案进行编辑 . 下来大约3个答案,找出basetring的凉爽 .

    旧答案:注意unicode字符串,您可以从多个地方获取,包括Windows中的所有COM调用 .

    if isinstance(target, str) or isinstance(target, unicode):
    
  • -3

    你可以做:

    var = 1
    if type(var) == int:
       print('your variable is an integer')
    

    要么:

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

    希望这可以帮助!

  • 199

    由于 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)
    
  • -5

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

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

    type(s) == type('')
    
  • 1

    其他人在这里提供了很多好的建议,但我没有看到一个好的跨平台总结 . 以下应该适用于任何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 .

  • 801

    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

  • 14

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

    isinstance(s, (str, unicode))
    

    但是仍然不能在Python 3中工作,因为没有定义 unicode (在Python 3中) .

  • 3
    a = '1000' # also tested for 'abc100', 'a100bc', '100abc'
    
    isinstance(a, str) or isinstance(a, unicode)
    

    返回True

    type(a) in [str, unicode]
    

    返回True

  • -5

    所以,

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

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

    此订单是出于有目的 .

  • 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)
    
  • 38

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

    if type(myvar) == str
    
  • 0

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

    您可以简单地使用isinstance函数来确保输入数据是格式字符串或unicode . 以下示例将帮助您轻松理解 .

    >>> isinstance('my string', str)
    True
    >>> isinstance(12, str)
    False
    >>> isinstance('my string', unicode)
    False
    >>> isinstance(u'my string',  unicode)
    True
    
  • 5
    s = '123'
    issubclass(s.__class__, str)
    
  • 5

    我是这样做的:

    if type(x) == type(str()):
    
  • 10
    varA = "hey"
    if type(varA) == str:
       print "it is a string"
    
  • -1

    我见过:

    hasattr(s, 'endswith')
    
  • -6

    要测试myvar是否为字符串,请使用以下命令:

    if type(myvar) == type('abc')
    
  • 10
    >>> thing = 'foo'
    >>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
    True
    

相关问题