【问题标题】:Python Value errorPython 值错误
【发布时间】:2017-01-26 06:37:51
【问题描述】:

尝试将管道输出拆分为 python 时出现错误。

错误是 need more than 3 values to unpack 虽然我使用了 8 个值

import subprocess, sys

from datetime import datetime

from time import sleep as sleep



multimon_ng = subprocess.Popen("multimon-ng -a FLEX -t wav flex.wav",
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    shell=True)

while True:
        nextline = multimon_ng.stdout.readline()
        flex, mdate, mtime, bitrate, other, capcode, o2, msg  = nextline.split(" ", 7)      # error here
        if nextline is " ":
            print "napping"
        else:
            print mdate + " " + mtime + " " + capcode + " " + msg

        multimon_ng.poll()
        sys.stdout.flush()

任何帮助都会很棒

【问题讨论】:

  • 嗨@shaggs,我删除了flex 标签,因为这显然不是Apache Flex 问题。我不确定如何重新标记它,因为我不确定在这种情况下您所说的“flex”是什么意思。它是快速词法分析器吗?还有什么?
  • @Brian FLEX 也是一种寻呼协议。在这个问题中如何使用它en.m.wikipedia.org/wiki/FLEX_(protocol)
  • 哦,我明白了。不幸的是,我认为我们没有那个标签:(
  • 没有,我做不了

标签: python-2.7 raspberry-pi subprocess stdout flex-paging


【解决方案1】:

3 在错误消息中指出右侧参数中可迭代的长度。

最少的错误示例:

a, = []  # ValueError: need more than 0 values to unpack
a, b = [1]  # ValueError: need more than 1 value to unpack
a, b, c = [1, 2]  # ValueError: need more than 2 values to unpack
# etc ...

最少的正确例子:

a, = [1]
a, b = [1, 2]
a, b, c = [1, 2, 3] 

修复和暴露问题的最小更改是将解包迭代包装在 try-except 块中。

while True:
    nextline = multimon_ng.stdout.readline()

    if not nextline:
        print "napping"
    else:
        try:
            flex, mdate, mtime, bitrate, other, capcode, o2, msg  = nextline.split(" ", 7)
        except ValueError:
            print "invalid line", nextline
        else:
            print mdate + " " + mtime + " " + capcode + " " + msg

    multimon_ng.poll()
    sys.stdout.flush()

如您所见,我还在拆包前检查了空行。如果行为空,解包也会失败。

【讨论】:

    猜你喜欢
    • 2019-04-26
    • 2017-03-15
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2017-07-31
    相关资源
    最近更新 更多