首页 > 解决方案 > 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)
                                       )   )

标签: python

解决方案


据推测,P正在返回一个bytes对象,而'BM'仍然是一个str. 最简单的解决方法是更改'BM'​​为b'BM',但鉴于此代码可能来自 Python 2,它可能期望迭代长度为 1 的字符串,而不是s,因此获得表示原始字节的 a的结果int可能是有意义的。.decode('latin-1')Pstr

str当在 Python 2 中以不完全面向文本或原始字节的方式使用时,从 Python 2 移植到 Python 3是很棘手的;这是其中一种情况。


推荐阅读