python - Python TypeError:只能将str(不是“字节”)连接到str
问题描述
我在我的硬盘上发现了一个非常古老的 Python 示例(Mandelbrot),它在几年前就可以使用。但现在我无法修复它...... :-(
Traceback (most recent call last):
File "/Volumes/SSD300/Python/Mandel.py", line 11, in <module>
for X in j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))or C:
TypeError: can only concatenate str (not "bytes") to str
macOS 上的 Python 3.9.0
_ = (
255,
lambda
V ,B,c
:c and Y(V*V+B,B, c
-1)if(abs(V)<6)else
( 2+c-4*abs(V)**-0.4)/i
) ;v, x=1500,1000;C=range(v*x
);import struct;P=struct.pack;M,\
j ='<QIIHHHH',open('M.bmp','wb').write
for X in j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))or C:
i ,Y=_;j(P('BBB',*(lambda T:(T*80+T**9
*i-950*T **99,T*70-880*T**18+701*
T **9 ,T*i**(1-T**45*2)))(sum(
[ Y(0,(A%3/3.+X%v+(X/v+
A/3/3.-x/2)/1j)*2.5
/x -2.7,i)**2 for \
A in C
[:9]])
/9)
) )
解决方案
据推测,P
正在返回一个bytes
对象,而'BM'
仍然是一个str
. 最简单的解决方法是更改'BM'
为b'BM'
,但鉴于此代码可能来自 Python 2,它可能期望迭代长度为 1 的字符串,而不是s,因此获得表示原始字节的 a的结果int
可能是有意义的。.decode('latin-1')
P
str
str
当在 Python 2 中以不完全面向文本或原始字节的方式使用时,从 Python 2 移植到 Python 3是很棘手的;这是其中一种情况。