繁体   English   中英

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

[英]How to check if type of a variable is string?

有没有办法检查python中变量的类型是否为string ,例如:

isinstance(x,int);

对于整数值?

在 Python 2.x 中,你会做

isinstance(s, basestring)

basestringstrunicode抽象超类 它可用于测试对象是否是strunicode的实例。


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

isinstance(s, str)

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

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

在 Python 3.x 或 Python 2.7.6 中

if type(x) == str:

你可以这样做:

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')

希望这有帮助!

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

根据下面更好的答案进行编辑。 往下看大约 3 个答案,了解 basestring 的酷炫。

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

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

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

因为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)

所以,

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

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

这个命令是有目的的。

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

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

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

type(s) == type('')

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

isinstance(s, (str, unicode))

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

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

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

返回真

type(a) in [str, unicode]

返回真

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

  • 用最少的 Py2 兼容代码用 Py3 代码编写。
  • 稍后删除 Py2 兼容代码而不会中断。 即仅用于删除,不修改 Py3 代码。
  • 避免使用six或类似的兼容模块,因为它们往往会隐藏要实现的目标。
  • 面向未来的 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)

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

if type(myvar) == str

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

您可以简单地使用isinstance函数来确保输入数据的格式为stringunicode 下面的例子将帮助您轻松理解。

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

使用type()isinstance()

我不知道为什么在我之前没有一个答案包含这个简单的type(my_variable) is str语法,但是type(my_variable) is str ,像这样使用type()对我来说似乎是最合乎逻辑和最简单的:

(在 Python3 中测试):

# Option 1: check to see if `my_variable` is of type `str`
type(my_variable) is str

# Option 2: check to see if `my_variable` is of type `str`, including
# being a subclass of type `str` (ie: also see if `my_variable` is any object 
# which inherits from `str` as a parent class)
isinstance(my_variable, str)

Python type()内置函数文档在这里: https://docs.python.org/3/library/functions.html#type 它部分说明了以下内容。 请注意有关isinstance()

class type(object)
class type(name, bases, dict, **kwds)

使用一个参数,返回对象的类型。 返回值是一个类型对象,通常与object.__class__返回的object.__class__相同。

建议使用isinstance()内置函数来测试对象的类型,因为它考虑了子类。

因此,如果您要检查类对象的类型而不是简单变量,并且需要考虑子类,请改用isinstance() 在此处查看其文档: https : //docs.python.org/3/library/functions.html#isinstance

示例代码:

my_str = "hello"
my_int = 7

print(type(my_str) is str)
print(type(my_int) is str)

print()
print(isinstance(my_str, str))
print(isinstance(my_int, str))

输出:

 True False True False

总结:

如果您同时想要 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 感到有点震惊。 我认为没有理由放弃它们,保留它们中的任何一个都可以解决这个问题。

varA = "hey"
if type(varA) == str:
   print "it is a string"
s = '123'
issubclass(s.__class__, str)

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

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

这就是我的做法:

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

我见过:

hasattr(s, 'endswith') 
>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM