zip 将代码从 python 2.7 更新到 python 3.6 时出现错误

问题描述 投票:0回答:1

我正在尝试更新一些用 python 2.7 编写的代码以在 python 3.9 中使用。使用“zip”函数的行不断抛出错误。

mask_1 = np.asarray([w1 & w2 for w1,w2 in zip(mask_1[::2],mask_1[1::2])])

错误内容为:

TypeError: unsupported operand type(s) for &: 'str' and 'str'

我的理解是我应该将 'zip' 转换为 python 3.9 的列表形式,即:

mask_1 = np.asarray([w1 & w2 for w1,w2 in list(zip(mask_1[::2],mask_1[1::2]))])

然后错误就变成了

TypeError: unsupported operand type(s) for &: 'str' and 'str'

在 python 2.7 中,“&”似乎是“str”类型可接受的操作数,但在 python 3.6 中则不然。什么是合适的解决方法?

python python-3.x python-2.7 zip
1个回答
0
投票

不,

for
操作的东西不一定是
list
,所以这就是为什么改变它会改变任何事情。

问题与错误中所述完全相同:您尝试在字符串上使用二元运算符

&
(类型
str
),这是没有意义的。所以,这是其他地方的错误!

可能,您在某个地方有一些逻辑假设字符串本质上是字节;但在 Python3 下则不然。因此,找到创建

mask_1
的代码,并确保它实际上创建了包含可以使用
&
组合的整数的东西 – 可以是实际的
bytes
对象,也可以是任何整数容器;无论它只是一个整数列表,还是一个 uint8 的 numpy ndarray,或者其他东西。

© www.soinside.com 2019 - 2024. All rights reserved.