【问题标题】:A 'too many values to unpack' error in pythonpython中的“太多值无法解包”错误
【发布时间】:2013-06-06 05:13:20
【问题描述】:
import pylab as pl

data = """AP 10
AA 20
AB 30
BB 40
BC 40
CC 30
CD 20
DD 10"""

grades = []
number = []

for line in data.split("/n"):
     x, y = line.split()
     grades.append(x)
     number.append(int(y))       
fig = pl.figure()
ax=fig.add_subplot(1,1,1)
ax.bar(grades,number)
p.show()

这是我的代码,我希望根据数据制作条形图。 最初,当我运行我的代码时,我在第 17 行收到了一个缩进错误,在为整个 for 块添加了一个空格之后,我在第 16 行开始收到这个“太多值无法解压错误”。 我是python新手,现在不知道如何进行。

【问题讨论】:

    标签: python python-3.x syntax-error


    【解决方案1】:
    for line in data.split("/n")
    

    应该是

    for line in data.split("\n")
    

    甚至更好:

    for line in data.splitlines()
    

    【讨论】:

    • 这是第二双眼睛无价的时代!
    【解决方案2】:

    问题是您的for-loop 拆分为错误的令牌(/n)而不是\n

    但是当您只想拆分换行符时,实际上有一个splitlines()-方法对字符串执行此操作:您实际上应该使用此方法,因为它还将处理 *nix 和 Windows 之间的不同换行符分隔符( *nix 系统通常通过\r\n 表示换行符,而Windows 使用\n 而旧的Mac OS 使用\r:查看Python documentation 了解更多信息)

    您的错误发生在下一行:由于字符串未拆分为行,您的整个字符串现在将在空白处拆分,这将产生比您尝试分配给元组的 2 更多的值.

    【讨论】:

    • 非常感谢。呃,现在我收到一个错误“无法将'float'对象隐式转换为str”。但是有任何浮动对象吗?为什么会出现这样的错误?
    • 我不是 100% 确定,但我猜错误来自 matplotlibbar 函数 (matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar) 需要两个参数: - left:左侧的 x 坐标边(我猜这些需要是浮点数而不是str)。 - 右:栏的高度。因此,您可能需要使用表示条形宽度的列表而不是标签作为第一个参数。要设置标签,您可能可以使用 matplotlib 中的 xticks 函数 - matplotlib-docs 中有一个广泛的示例。看看这是否有帮助或只是再次询问:)
    • 是的,我正确阅读了错误,这是由于matplotlib函数..所以我将等级改为[1,2,3,4,5,6,7,8],然后使用了 xticks 功能,现在可以正常使用了 :) 再次感谢。
    【解决方案3】:

    你有一行 not 上面有两个项目:

     x, y = line.split()
    

    没有拆分为两个元素,这会引发错误。很可能是因为您没有正确拆分 data 变量并将整个文本作为 one 长文本。 /n 不会出现在您的 data 数据中。

    改用.splitlines()

    for line in data.splitlines():
         x, y = line.split()
    

    【讨论】:

      【解决方案4】:

      为了一个有趣的选择,而不是像其他人建议的那样使用splitlines 方法,您也可以在这里使用StringIO 对象:

      >>> data = """AP 10
      ... AA 20
      ... AB 30
      ... BB 40
      ... BC 40
      ... CC 30
      ... CD 20
      ... DD 10"""
      >>> import cStringIO as StringIO
      >>> filelike = StringIO.StringIO(data)
      >>> for line in filelike:
      ...     print line.split()
      ... 
      ['AP', '10']
      ['AA', '20']
      ['AB', '30']
      ['BB', '40']
      ['BC', '40']
      ['CC', '30']
      ['CD', '20']
      ['DD', '10']
      

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 1970-01-01
        • 2013-05-24
        • 2020-12-30
        • 1970-01-01
        相关资源
        最近更新 更多