最推荐使用 isinstance(var, str) 判断字符串,它安全、符合 Python 风格、支持继承且兼容 Python 3;避免 type(var) == str,因其不识别子类且违背鸭子类型;Python 3 中 str 为 Unicode,bytes 为独立类型。

在 Python 中,判断一个变量是否为字符串,最推荐的方式是使用 isinstance() 函数配合 str 类型。
用 isinstance() 判断(推荐)
这是最安全、最符合 Python 风格的做法,能正确处理继承关系,且兼容 Python 2/3(在 Python 3 中 str 就是 Unicode 字符串):
-
isinstance(var, str)返回True表示变量是字符串类型 - 即使变量是自定义类继承自
str,也能被正确识别 - 比直接比较
type(var) == str更健壮
示例:
x = "hello"print(isinstance(x, str)) # True
y = 123
print(isinstance(y, str)) # False
避免用 type() == str
虽然语法上可行,但不推荐:
立即学习“Python免费学习笔记(深入)”;
-
type(var) is str或type(var) == str无法识别子类实例 - 违反“鸭子类型”哲学,也不符合 PEP 8 推荐实践
注意 Python 2 和 3 的差异(如需兼容)
Python 2 中有 str(字节串)和 unicode(Unicode 字符串),而 Python 3 中统一为 str(Unicode),bytes 是独立类型。若必须支持 Python 2:
- 用
isinstance(var, basestring)(Python 2),但该类型在 Python 3 中已移除 - 现代项目建议只支持 Python 3,直接用
isinstance(var, str)即可
区分字符串和字节序列(Python 3 常见需求)
如果你还关心变量是不是 bytes 类型(比如读文件或网络响应时),可以分开判断:
-
isinstance(var, str)→ 普通字符串(Unicode) -
isinstance(var, bytes)→ 字节序列 - 两者互不重叠,
str和bytes是不同类型











