【发布时间】:2015-11-03 00:23:18
【问题描述】:
我知道我是否要检查例如变量 x 是否为 str 我会做
if type(x) is str:
但是如何检查 x 是字符串还是列表?所以我可以在不添加另一个 if 分支的情况下做到这一点
if type(x) is (str, list):
pass
else:
raise SomeError
【问题讨论】:
标签: python if-statement types boolean
我知道我是否要检查例如变量 x 是否为 str 我会做
if type(x) is str:
但是如何检查 x 是字符串还是列表?所以我可以在不添加另一个 if 分支的情况下做到这一点
if type(x) is (str, list):
pass
else:
raise SomeError
【问题讨论】:
标签: python if-statement types boolean
type(x) in (str, list)
或
isinstance(x, (str, list))
两者在语义上并不相同。阅读文档中的isinstance() 函数。
【讨论】:
isinstance() 通常是首选(但并非总是如此)。
isinstance()。
if isinstance(x, list) or isinstance(x, list):
或者对于许多不同的类型
if any(isinstance(x, i) for i in [list, tuple, string]):
或者如果你想看看它是否是任何类型的可迭代
if hasattr(x, '__iter__'):
【讨论】:
isinstance(x, collections.Iterable) 比 hasattr(x, '__iter__') 更 Pythonic。 -- 你可以将一个元组作为第二个参数传递给isinstance()
class Test(object): def __iter__(self): return [] 这样的愚蠢类,hasattr(Test, '__iter__') 将返回 True,isinstance(x, collections.Iterable) 将返回 False。取决于您希望如何处理格式错误的类,例如我的 Test 类。
isinstance(Test(), collections.Iterable) 返回 True。 ideone.com/YbEbzA
使用类似下面的in关键字:
if type(x) in (str, list):
或者使用isinstance内置函数:
if isinstance(x, (str, list)):
【讨论】: