Python 检查变量是否为两种类型之一?(str或列表)
我知道如果我想检查变量x是否是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): 或 这两者在语义上并不相同。
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()
。