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

2025-02-12 10:04:00
admin
原创
55
摘要:问题描述:有没有办法检查 python 中变量的类型是否为string,例如:isinstance(x,int); 为整数值?解决方案 1:s在 Python 3.x 中,检查是否为字符串的正确方法是isinstance(s, str) 该类bytes在 Python 3 中不被视为字符串类型。在 Pytho...

问题描述:

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

isinstance(x,int);

为整数值?


解决方案 1:

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

isinstance(s, str)

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


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

isinstance(s, basestring)

basestring是和的抽象超类。它可用于测试对象是否是 或 的实例。str`unicodestrunicode`

解决方案 2:

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

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,

解决方案 3:

在 Python 3.x 或 Python 2.7.6 中

if type(x) == str:

解决方案 4:

你可以这样做:

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

希望这有帮助!

解决方案 5:

使用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))

输出:

True
False

True
False

解决方案 6:

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

解决方案 7:

根据下面更好的答案进行编辑。继续阅读大约 3 个答案,了解 basestring 的酷之处。

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

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

解决方案 8:

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

解决方案 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

解决方案 10:

其他人在这里提供了许多很好的建议,但我没有看到很好的跨平台总结。以下内容对于任何 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)查看我们的输入是strPython 3 中的 a 还是basestringPython 2 中的 a。

解决方案 11:

所以,

您有很多方法可以检查您的变量是否是字符串:

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

此命令是有目的的。

解决方案 12:

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

对于字符串你可以使用它

type(s) == type('')

解决方案 13:

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

isinstance(s, (str, unicode))

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

解决方案 14:

以下是我对支持 Python 2 和 Python 3 的回答以及以下要求:

  • 用 Py3 代码编写,使用最少的 Py2 兼容代码。

  • 稍后删除兼容 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)

解决方案 15:

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

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

返回 True

type(a) in [str, unicode]

返回 True

解决方案 16:

如果你不想依赖外部库,这个对 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");

解决方案 17:

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

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

解决方案 18:

总结:

如果你想要同时使用 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 感到有些震惊。我认为没有理由删除它们,保留其中任何一个都可以解决这个问题。

解决方案 19:

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

解决方案 20:

我是这样做的:

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

解决方案 21:

我见过:

hasattr(s, 'endswith') 

解决方案 22:

>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用