尝试解压缩集时出现TypeError与ValueError

 平凡黯淡_551 发布于 2023-02-04 15:56

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

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

加薪

Traceback (most recent call last):
  File "asdf.py", line 86, in 
    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 
    for one, two in s2:
ValueError: need more than 1 value to unpack

Martijn Piet.. 6

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

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

ValueError升高,因为长度为1的串不能被解压缩到两个目标.

但是,当循环遍历整数序列时,您试图将每个整数值解包为两个目标,并且整数根本不可迭代.这是一个TypeError,因为它直接连接到您要解压缩的对象类型:

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

将其与字符串,列表,元组,迭代器,生成器等进行比较,它们都是可迭代的类型.

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

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

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

1 个回答
  • 字符串也是一个序列; 你可以将字符串解压缩成单独的字符:

    >>> 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
    

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

    2023-02-04 15:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有