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

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

isinstance(x,int);

对于整数值?

1259645 次浏览

在Python 3. x中,检查s是否为字符串的正确方法是

isinstance(s, str)

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


在Python 2. x中,正确的检查是

isinstance(s, basestring)

basestringstrunicode抽象超类。它可用于测试对象是str还是unicode的实例。

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

根据下面更好的答案进行编辑。往下看大约3个答案,找出基弦的凉爽程度。

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

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

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

isinstance(s, (str, unicode))

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

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

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

type(s) == type('')

我知道这是一个古老的话题,但作为谷歌上显示的第一个话题,鉴于我没有找到任何令人满意的答案,我将把它留在这里以供将来参考:

是一个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 2.7+和Python 3(http://ideone.com/uB4Kdc):

# your code goes heres = ["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");

我是这样做的:

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

我看过:

hasattr(s, 'endswith')

在Python 3. x或Python 2.7.6中

if type(x) == str:

Python 2/3包括Unicode

from __future__ import unicode_literalsfrom builtins import str  #  pip install futureisinstance('asdf', str)   #  Trueisinstance(u'asdf', str)  #  True

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

由于Python3中没有定义basestring,这个小技巧可能有助于使代码兼容:

try: # check whether python knows about 'basestring'basestringexcept NameError: # no, it doesn't (it's Python3); use 'str' insteadbasestring=str

之后,您可以在Python2和Python3上运行以下测试

isinstance(myvar, basestring)

这里有很多其他人提供的好建议,但我没有看到一个好的跨平台总结。以下应该是任何Python程序的一个很好的方法:

def isstring(s):# if we use Python 3if (sys.version_info[0] >= 3):return isinstance(s, str)# we use Python 2return isinstance(s, basestring)

在这个函数中,我们使用isinstance(object, classinfo)来查看我们的输入是Python 3中的str还是Python 2中的basestring

你可以这样做:

var = 1if 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')

希望这有帮助!

您可以简单地使用is实例函数来确保输入数据的格式为字符串Unicode。下面的示例将帮助您轻松理解。

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

所以,

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

a = "my string"type(a) == str # firsta.__class__ == str # secondisinstance(a, str) # thirdstr(a) == a # forthtype(a) == type('') # fifth

这个命令是有目的的。

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以及这些要求的回答:

  • 用Py3代码编写,使用最少的Py2 Compat代码。
  • 稍后在不中断的情况下删除Py2 Compat代码。即只删除,不修改Py3代码。
  • 避免使用six或类似的Compat模块,因为它们倾向于隐藏正在努力实现。
  • 面向未来的潜在Py4。

import sysPY2 = 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)
>>> thing = 'foo'>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'True

总结:

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

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

然后,每当我想测试一个对象以查看它是否是字符串时:

if isinstance(obj, basestring):...

坦率地说,我有点震惊Python3丢弃了base string和type. StringTypes。我认为没有理由丢弃它们,保留它们中的任何一个都可以解决这个问题。

使用type()isinstance()

我不知道为什么在我面前没有一个答案包含这个简单的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)

Pythontype()内置函数留档在这里:https://docs.python.org/3/library/functions.html#type。它部分声明如下。注意关于isinstance()的注释:

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

使用一个参数,返回对象的类型。返回值是一个类型对象,通常与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))

输出:

TrueFalse
TrueFalse