python - 检查变量是否可以解包

标签 python python-3.x

假设我有一个未知数据类型的变量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/

相关文章:

python - 在 python 中随时间监控子进程资源

python - 端子输出变黑

python-3.x - 显示多个满足特定条件的数据-PANDAS 中的问题

python - Kivy标签代码从kivy语言转python

Python Sqlite3 - 使用 f 字符串更新数据库功能

python - 为什么我的 "if"语句在 python 中不起作用?

python - 从 python 代码连接到远程 python 内核

Python - 计算空格,而不是空行

python - 如何在新的 Python 进程中设置环境变量

python - 如何在不影响单词的情况下限制每行的字符数?