gpt4 book ai didi

python - 尝试解压集合时的 ​​TypeError 与 ValueError

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:03 24 4
gpt4 key购买 nike

为什么下面的两个代码片段会产生不同的错误?我知道字符串是可迭代的,但我不明白为什么这在这里很重要,因为集合是被迭代的对象。

s = set([1, 2])        
for one, two in s:
print one, two

加注

Traceback (most recent call last):
File "asdf.py", line 86, in <module>
for one, two in s:
TypeError: 'int' object is not iterable

s2 = set(['a', 'b'])
for one, two in s2:
print one, two

加注

Traceback (most recent call last):
File "asdf.py", line 90, in <module>
for one, two in s2:
ValueError: need more than 1 value to unpack

最佳答案

字符串也是一个序列;您可以将字符串解压缩为单独的字符:

>>> a, b = 'cd'
>>> a
'c'
>>> b
'd'

ValueError 被引发是因为长度为 1 的字符串不能被解压成两个目标。

然而,当遍历整数序列时,您试图将每个整数值解包到两个目标中,而整数根本不可迭代。这是一个 TypeError,因为它直接与您尝试解包的对象类型相关:

>>> a, b = 42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

将其与字符串、列表、元组、迭代器、生成器等进行比较,这些都是可迭代的类型。

如果您想直接解压集合,请不要使用 for 循环:

>>> a, b = set([1, 2])
>>> a
1
>>> b
2

但要知道集合没有固定顺序(就像字典一样),值的分配顺序取决于集合中插入和删除的确切历史。

关于python - 尝试解压集合时的 ​​TypeError 与 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com