如何检查Python对象是否为字符串(常规或Unicode)?
当前回答
为了检查你的变量是不是你可以这样做:
s='Hello World'
if isinstance(s,str):
#do something here,
阻力的输出会给你一个布尔值True或False,这样你就可以相应地调整。 你可以通过以下方法检查你的值的首字母缩写: 类型(年代) 这将返回您键入'str',以便您可以在isistance函数中使用它。
其他回答
Python 2和3
(cross-compatible)
如果你想检查不考虑Python版本(2。x vs . 3.x),使用six (PyPI)及其string_types属性:
import six
if isinstance(obj, six.string_types):
print('obj is a string!')
在六个(一个非常轻量级的单文件模块)中,它只是这样做的:
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str
else:
string_types = basestring
你可以通过连接一个空字符串来测试它:
def is_string(s):
try:
s += ''
except:
return False
return True
编辑:
更正我的回答后的评论指出,这失败与列表
def is_string(s):
return isinstance(s, basestring)
我认为可以安全地假设,如果repr()输出的最后一个字符是'或',那么无论它是什么,它都可以被认为是某种字符串。
def isStr(o):
return repr(o)[-1] in '\'"'
我假设repr不会做任何太繁重的事情,它会返回一个至少有一个字符的字符串。您可以使用类似的方法来支持空字符串
repr(o)[-1:].replace('"', "'") == "'"
但这仍然假设repr返回一个字符串。
我可能会像其他人提到的那样,用鸭子类型来处理这个问题。我怎么知道一个字符串真的是一个字符串?显然是通过将其转换为字符串!
def myfunc(word):
word = unicode(word)
...
如果arg已经是一个字符串或unicode类型,real_word将保持其值不变。如果传递的对象实现了__unicode__方法,则该方法用于获取其unicode表示。如果传递的对象不能作为字符串使用,unicode内置将引发异常。
如果有人想远离显式类型检查(有很好的理由远离它),可能字符串协议中最安全的检查部分是:
str(maybe_string) == maybe_string
它不会遍历iterable或迭代器,它不会将字符串列表调用为字符串,它会正确地将类似字符串的对象检测为字符串。
当然也有缺点。例如,str(maybe_string)可能是一个繁重的计算。通常情况下,答案是视情况而定。
编辑:正如@Tcll在评论中指出的那样,这个问题实际上要求一种同时检测unicode字符串和字节字符串的方法。在Python 2上,这个答案将失败,对于包含非ascii字符的unicode字符串会出现异常,在Python 3上,它将对所有字节字符串返回False。
推荐文章
- IEEE 754浮点数不能精确表示的第一个整数是哪一个?
- 在每个列表元素上调用int()函数?
- 在Lua中拆分字符串?
- 当使用代码存储库时,如何引用资源的相对路径
- c++中size_t和int的区别是什么?
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀
- 代码结束时发出警报
- 如何在Python中按字母顺序排序字符串中的字母
- 在matplotlib中将y轴标签添加到次要y轴
- 如何消除数独方块的凹凸缺陷?
- 为什么出现这个UnboundLocalError(闭包)?