【问题标题】:Error: Too Many Values to Unpack (Python)错误:要解包的值太多(Python)
【发布时间】:2014-08-06 01:40:51
【问题描述】:

我正在使用 python 2.7.3

这是我的代码的 sn-p:

linematchregex = re.compile('(\d+/\d+ \d+:\d+), (\d+\.\d+)')
.
.
with open(r'temp.txt', 'r') as f:
     f.next()
     t,temp = zip(*[p for line in for p in linematchregex.findall(line)])
     groups = itertools.groupby(f, lambda row row[0].split()[0])
     for date, group in groups:
               group = [(datetime.strptime(dt), value)
                       **for dt, value in group]**
               during_8to5 = {len(value) for value in group
                             if datetime.time(8) <= dt.time() < datetime.time(17)}
      .
      .
      .
      .
      long_title = {'\n Max AMB_TEMP Value: {:.2f} at {}, Min AMB_TEMP Value: {:.2f} at  
      {}, Mean AMB_TEMP Value: {:.2f} at {}')
      ax1.set_title(long_title.format(max(group),min(group),sum(during_8to5)/len(during_8to5))

当我运行模块时,我得到 'for dt, value in group' 我得到'太多的值无法解压'

fyi,我的 txt 文件数据是:21/7/2014 0:00,0.66,29.16 那么我应该输入'split(',')',因为我的数据用逗号分隔吗? 由于我的时间是 h:m 格式,只输入 8 和 17 可以吗?

【问题讨论】:

    标签: python graph max mean


    【解决方案1】:

    我假设您在“组”中的值可能并非全部相等。考虑以下简单示例:

    >>> a, b = 1, 2, 3
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: too many values to unpack (expected 2)
    

    现在,我想你想要的是:

    >>> [ (a, b) for a, b in [[1,2],[3,4], [5,6]] ]
    [(1, 2), (3, 4), (5, 6)]
    

    但是会发生什么:

    >>> [ (a, b) for a, b in [[1,2], [3,4], [5,6,7]] ]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 1, in <listcomp>
    ValueError: too many values to unpack (expected 2)
    

    您可以通过以下简单方法快速复查:

    during_8to5 = {len(vals) for vals in group
                                 if datetime.time(8) <= dt.time() < datetime.time(17)}
    
    print(during_8to5)
    

    如果结果集不包含单个值,您就知道问题出在哪里。

    编辑:

    我可能已经查看了 from 行,因为您正在使用

    for dt, value in group
    

    在 2 个位置。如果您只使用 pdb 之类的调试器,将 len 的打印上移一级,或者在出现 ValueError 时使用 try-except 打印 group 的长度并退出程序。

    【讨论】:

    • 嗨塞巴斯蒂安,非常感谢您的回复,但是当我运行我的模块时,我收到一条错误消息,提示“ax1.set_title”行出现名称错误:名称“组”未定义跨度>
    • 我假设**for dt, value in group]** 行中的星号仅用于在 Stackoverflow 上突出显示?
    • 是的,我只是为了便于查看,您需要完整的代码吗?
    • 我还发现如果我将 ax1.set_title 行放在 during_8to5 行的下方,它会正常运行,但不会显示最大值/最小值或平均值
    • 基本上,您之前已经在另一行通过t,temp = zip(*[p... 解决了这个问题(或找到了解决方法),您基本上必须在那些解压值时出现错误的地方做同样的事情的group。也许看看groups 中的子项是什么样子会很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多