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

wan*_*gcs 6 python string python-3.x

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

comments = []
comments.append(file_zip.getinfo('%s.txt'%name).comment)
print(''.join(comments))
Run Code Online (Sandbox Code Playgroud)

但这给了我错误:

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

我寻找答案,并尝试这样:

print(b''.join(comments))
Run Code Online (Sandbox Code Playgroud)

它工作和打印:

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  
Run Code Online (Sandbox Code Playgroud)

我认为它'/n'视为一个字母和打印它,但是,我不希望这样.我怎样才能使它工作?

Jim*_*ard 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
Run Code Online (Sandbox Code Playgroud)

加入b''是一个可行的选择,但是,正如你所说,它并没有逃脱特殊的角色,如'\n'; 这是bytes实例的预期行为.

您可以decodejoin编辑后输入字符串b'':

print(b''.join(comments).decode())
Run Code Online (Sandbox Code Playgroud)

或者,您最初尝试使用和在空字符串上的decode每个元素:commentsmapjoin''

print(''.join(map(bytes.decode, comments)))
Run Code Online (Sandbox Code Playgroud)