假设我有一个未知数据类型的变量x
。我还有一些随机函数 foo
。现在我想按照以下几行做一些事情:
如果x
是可以使用**解包的类型,比如字典,调用foo(**x)
。否则,如果 x
是可以使用 * 解包的类型,例如元组,则调用 foo(*x)
。否则,只需调用 foo(x)
。
有没有一种简单的方法来检查一个类型是否可以通过 ** 或 * 解包?
我目前正在做的是检查 x 的类型并执行如下操作:
if type(x) == 'dict':
foo(**x)
elif type(x) in ['tuple','list', ...]:
foo(*x)
else:
foo(x)
但问题是我不知道实际上可以解包的数据类型的完整列表,我也不确定用户定义的数据类型是否可以有允许它们被解包的方法。
最佳答案
你可以使用try
:
try:
foo(**x)
except:
try:
foo(*x)
except:
foo(x)
它有点粗糙,并且不区分异常发生的原因(可以通过检查异常类型来缓解),但消除了尝试和枚举可以调用哪些类型的需要哪一条路。
关于python - 检查变量是否可以解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307581/