TypeError:序列项0预期的str实例,找到的字节

时间:2016-09-24 07:47:49

标签: python string python-3.x

我正在进行Python挑战,但在任务6中我遇到了一些问题:

comments = []
comments.append(file_zip.getinfo('%s.txt'%name).comment)
print(''.join(comments))

但这给了我错误:

TypeError:序列项0:预期的str实例,找到的字节

我找到了答案,并尝试这样:

print(b''.join(comments))

它工作和打印:

b'***************************************************************\n****************************************************************\n**                                                    **\n**   OO    OO    XX    YYYY    GG    GG  EEEEEE NN      NN  **\n**    OO    OO  XXXXXX   YYYYYY   GG
    GG   EEEEEE  NN    NN   **\n**   OO    OO XXX  XXX YYY   YY  GG GG     EE       NN  NN    **\n**    OOOOOOOO XX    XX YY        GGG       EEEEE     NNNN     **\n**   OOOOOOOO XX    XX YY        GGG       EEEEE      NN      **\n**   OO    OO XXX  XXX YYY   YY  GG GG     EE         NN      **\n**
 OO    OO  XXXXXX   YYYYYY   GG   GG   EEEEEE     NN      **\n**   OO      OO         XX       YYYY    GG    GG  EEEEEE     NN  

我认为它将'/n'视为char并打印出来,但是,我不希望这样。我怎样才能使它发挥作用?

1 个答案:

答案 0 :(得分:11)

问题是file_zip.getinfo('%s.txt'%name).comment显然会返回bytes个对象。当您尝试加入str,即''.join(..)时,您会收到错误消息:

''.join([b'hello', b'\n', b'world'])    
TypeError: sequence item 0: expected str instance, bytes found

加入b''是一个可行的选择,但正如您所说,它不会像'\n'那样逃避特殊字符;这是bytes个实例的预期行为。

decode joinb''后,您可以print(b''.join(comments).decode()) 字符串:

decode

comments map的每个元素,join''在您最初尝试的空字符串print(''.join(map(bytes.decode, comments))) 上:

Bitmap MasterImage = new Bitmap(PageSize.Width, PageSize.Height, PixelFormat.Format32bppArgb);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(MasterImage);