Python 检查变量是否为两种类型之一?(str或列表)

Python 检查变量是否为两种类型之一?(str或列表),python,if-statement,types,boolean,Python,If Statement,Types,Boolean,我知道如果我想检查变量x是否是str,我会这样做 if type(x) is str: 但是如何检查x是字符串还是列表?因此,我可以在不添加另一个if分支的情况下执行此操作 if type(x) is (str, list): pass else: raise SomeError 或 这两者在语义上并不相同。阅读文档中的isinstance()函数 if isinstance(x, list) or isinstance(x, list): 或 这两者在语义上并不相同。

我知道如果我想检查变量x是否是str,我会这样做

if type(x) is str:
但是如何检查x是字符串还是列表?因此,我可以在不添加另一个if分支的情况下执行此操作

if type(x) is (str, list):
     pass
else:
     raise SomeError

这两者在语义上并不相同。阅读文档中的
isinstance()
函数

if isinstance(x, list) or isinstance(x, list):

这两者在语义上并不相同。阅读文档中的
isinstance()
函数

if isinstance(x, list) or isinstance(x, list):
或者对于许多不同的类型

if any(isinstance(x, i) for i in [list, tuple, string]):
或者如果你想看看它是否是任何类型的可移植的

if hasattr(x, '__iter__'):
或者对于许多不同的类型

if any(isinstance(x, i) for i in [list, tuple, string]):
或者如果你想看看它是否是任何类型的可移植的

if hasattr(x, '__iter__'):

在关键字中使用
,如下所示:

if type(x) in (str, list):
或使用
isinstance
内置功能:

if isinstance(x, (str, list)):

关键字中使用
,如下所示:

if type(x) in (str, list):
或使用
isinstance
内置功能:

if isinstance(x, (str, list)):

我认为,
isinstance(x,collections.Iterable)
hasattr(x,'.\u iter'.')
更像Pythonic您可以将一个元组作为第二个参数传递给
isinstance()
@NiklasR,它们并不完全相等。如果我创建一个像
类Test(object):def uu iter uu(self):return[]
hasattr(Test),
将返回True,
isinstance(x,collections.Iterable)
将返回False。取决于您希望如何像对待我的测试类一样对待格式错误的类。@NightShadeQueen我无法确认该行为,对于我来说,
isinstance(Test(),collections.Iterable)
返回True。我认为,
isinstance(x,collections.Iterable)
hasattr(x,'.\u iter'.')
更像Pythonic您可以将一个元组作为第二个参数传递给
isinstance()
@NiklasR,它们并不完全相等。如果我创建一个像
类Test(object):def uu iter uu(self):return[]
hasattr(Test),
将返回True,
isinstance(x,collections.Iterable)
将返回False。取决于您希望如何像对待我的测试类一样对待格式错误的类。@NightShadeQueen我无法确认该行为,对于我来说,
isinstance(Test(),collections.Iterable)
返回True<代码>isinstance()
通常是首选(但不总是)。对,取决于您想要的语义。:)但大多数情况下,您希望
isinstance()
isinstance()
通常是首选(但并不总是)。对,这取决于您想要的语义:但大多数情况下,您需要
isinstance()