【问题标题】:TypeError: type.__new__() argument 2 must be tuple, not strTypeError: type.__new__() 参数 2 必须是元组,而不是 str
【发布时间】:2021-05-17 09:24:10
【问题描述】:

运行下面的代码时出现以下错误。我可以在屏幕上清楚地打印*strs 的值,它显示为字符串。但是,当我执行type(*strs) 时,它会抛出TypeError: type.__new__() argument 2 must be tuple, not str。有人可以解释这种行为吗?

strs = ["flower","flood","flight"]
print(*strs)
print(type(strs))
print(type(*strs))

输出:

Traceback (most recent call last):
print(type(*strs))
TypeError: type.__new__() argument 2 must be tuple, not str
flower flood flight
<class 'list'>
Process finished with exit code 1

【问题讨论】:

  • 请添加纯python标签
  • 他的问题比这更复杂一点。具体来说,他想解释“type.__new__() argument 2 must be tuple, not str”的含义,以及为什么他的代码会导致该特定错误。他不是在问星星是什么意思。

标签: python-3.x string tuples typeerror


【解决方案1】:

'*strs' 中的 asterix 运算符解包 'strs' 中的项,它是一系列三个字符串。您的代码在尝试将这些字符串发送到 type() 命令时遇到了麻烦,其中 type() 由其 __ new__() 魔术方法初始化。

type() 有两种形式:

1.) type(object) 其中“object”是某个类的实例。

2.) type(name, bases, dictionary) 其中“bases”是一个列出基类的元组,以及一个包含基类定义的字典。

在您的代码中,使用解包操作 *strs 导致 type() 被发送三个参数,因此它需要一个名称、一个元组和一个字典。它得到了什么,然后 __new()__ 得到了三个字符串:一个名称(它收到了 'flower'),然后是另一个字符串“flood”,它需要一个元组。在这里,python 抛出了错误,并没有出现在第三个字符串 'flight' 中。

我们可以重复错误:

 print(type("a","b","c"))

我们还可以看到一个或三个(但不是两个)参数是预期的,其中:

 print(type("a","b"))

虽然以下命令可以正常工作:

print(type("a"))

如果你想查看 *strs 的每个成员的类型,首先让它解压到一个列表,然后遍历这个列表,在你去的时候打印每个成员的类型。

 mylist = [*strs]
 for elm in mylist:
      print(type(elm))

这是否回答了导致该行为和错误的原因?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多