Python3 ValueError:用for循环解压缩的值太多了

时间:2015-01-29 21:42:27

标签: python-3.x

我已经看到了同样的问题,但它始终是这样的:

val1, val2 = input("Enter 2 numbers")

我的问题不同。

我有两个字符串str1str2。我想逐字节地比较它们,使得输出看起来像这样:

str1  str2
 0A    0A
 20    20
 41    41
 42    42
 43    43
 31    31
 32    32
 33    33
 2E    21

所以,我尝试过各种语法来比较它们,但它始终以相同的错误结束。这是我最近的一次尝试:

#!/usr/bin/python3
for c1, c2 in (tuple("\n ABC123."), tuple("\n ABC123!")):
    print("%02X    %02X" % (ord(c1), ord(c2)))

错误:

$ python3 test.py
Traceback (most recent call last):
  File "test.py", line 1, in <module>
ValueError: too many values to unpack (expected 2)

当然,这一行:

for c1, c2 in (tuple("\n ABC123."), tuple("\n ABC123!")):

经历了许多不同的迭代:

for c1, c2 in "asdf", "asdf"
for c1, c2 in list("asdf"), list("asdf")
for c1, c2 in tuple("asdf"), tuple("asdf")
for c1, c2 in (tuple("asdf"), tuple("asdf"))
for (c1, c2) in (tuple("asdf"), tuple("asdf"))

所有这些都引发了同样的错误。

我认为我不太了解python的压缩/解压缩语法,而我只是准备好一起攻击黑客攻击低级别的解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,所以我最终这样做了:

for char in zip(s1,s2):
    print("%02X    %02X" % ( ord(char[0]), ord(char[1]) ))

但是,我注意到如果我碰巧有两个不同长度的列表,那么较长的列表似乎最终会被截断。例如:

s1 = "\n ABC123."
s2 = "\n ABC123!."
0A    0A
20    20
41    41
42    42
43    43
31    31
32    32
33    33
2E    21
#     !! <-- There is no "2E"

所以我想我可以通过为每个字符串打印len()然后填充较短的字符串来解决这个问题。