TypeError: isinstance() arg 2 必须是类型或类型的元组

Posted

技术标签:

【中文标题】TypeError: isinstance() arg 2 必须是类型或类型的元组【英文标题】:TypeError: isinstance() arg 2 must be a type or tuple of types 【发布时间】:2019-04-26 10:41:45 【问题描述】:

如果你和我一样,你可能已经尝试过:

isinstance(my_var, [list, tuple])

只为得到:

TypeError: isinstance() arg 2 must be a type or tuple of types

现在我完全理解了这个问题(错误信息很清楚)以及如何解决它。 我也了解列表和元组(可变与不可变)之间的区别。

但是,我想了解的是,Python 解释器还允许将列表作为 isinstance arg 2 提供的权衡是什么? (反正代码已经需要检查参数是标量还是元组)

如果您像我一样,它会节省很多不得不来回迭代应用修复,所以我很好奇 Python 标准函数是否有性能或其他原因不混合这里接受列表和元组?

【问题讨论】:

类比和相关***.com/a/45118023/6260170 这读起来更像是一个咆哮而不是一个问题。此外,除了 python 核心团队之外,这不是真正可以回答的问题。所有语言都会做出有问题的决定。 @JaredSmith,对不起,不是要咆哮。只是想了解 Python 在这种情况下接受列表的利弊是什么?我已经澄清了我提出问题的动机。 这是一个合理的问题,但请阅读我上面链接的答案,这里真的没有任何理由接受列表。但是,与 str.startswith 情况不同,它没有参数表明您需要单个字符串的特殊情况 链接很有趣。肿瘤坏死因子。但是,我会争辩说,假设“所有事物都是平等的”成立(我不确定这里是否如此?),用户友好性也是一个重要的项目? 【参考方案1】:

isinstance(my_var, (list, tuple)) 有效! 请注意,2-ed arg 仅接受 tuple 而不是 list

【讨论】:

以上是关于TypeError: isinstance() arg 2 必须是类型或类型的元组的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: isinstance() arg 2 必须是类型或类型的元组

TypeError:类型别名不能与 isinstance() 一起使用

python Python:ClassName(list),isinstance(),TypeError,ValueError,.append()

Django Unittest无法使用TypeError运行:isinstance()arg 2必须是一台机器上的类型或元组,而不是其他机器上的类型或元组

Python isinstance() 函数

Python isinstance() 函数