【问题标题】:ValueError: too many values to unpack, can't figure out nested loopValueError:解包的值太多,无法找出嵌套循环
【发布时间】:2018-04-06 02:21:31
【问题描述】:

因此,我正在尝试创建一段代码,该代码将获取绿屏图像并将其放置在没有绿屏且透明的背景上。我这样做是为了分配,所以我不能使用色度键或字母键功能。我应该使用嵌套循环来计算每个绿色像素,如果它不是绿色的,我不会将它复制到背景图像中。不管怎样,这是我的代码。

for i in range(0, fy):
    for j in range(0, fx):
        (red,green,blue) = fg.get_at( (i,j) )
        if green == 255:
            green = 0
        else :
            fg.set_at( (i,j), (red,0,blue) )

        pygame.display.update() 

fx 和 fy 之前已声明为前景绿屏图像的图像大小。我收到一条错误消息:

Traceback (most recent call last):
  File "a6.py", line 60, in <module>
    (red,green,blue) = fg.get_at( (i,j) )
ValueError: too many values to unpack (expected 3)

谁来帮帮我

【问题讨论】:

  • (red,green,blue) -> red,green,blue fg.get_at( (i,j) ) 返回元组,您需要与元组元素一样多的变量。现在你在左边有一个变量“(red,green,blue)”。
  • 什么是get_at()?您使用的是什么确切的 python3 版本?另外,请更正代码的缩进。
  • 尝试使用打印fp.get_at返回的内容进行调试
  • 我猜你可能忘记解压 alpha 通道:(red,green,blue,alpha) = fg.get_at( (i,j) )

标签: python python-3.x valueerror


【解决方案1】:

使用

red, green, blue = fg.get_at( (i,j) )

而不是

(red,green,blue) = fg.get_at( (i,j) )

【讨论】:

  • 不,这没什么区别。使用() 不是创建元组的原因,逗号可以。
  • 两种语法都是一样的。无论括号如何,逗号分隔的变量名称都被视为元组。问题应该是 get_at 可能返回超过 3 个变量。
  • 那么我该如何解决这个问题呢?
【解决方案2】:

问题是我必须像这样用下划线编写代码

(red,green,blue,_) = fg.get_at( (i,j) )

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 2021-01-16
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2013-05-18
    相关资源
    最近更新 更多