类型错误:序列项0需要str实例,找到字节

2024-05-14 06:29:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但这给了我一个错误:

类型错误:序列项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'视为一个字符并打印出来,但是,我不希望这样。我怎样才能成功?


Tags: 错误nncommentsxxxooprintjoinxx
1条回答
网友
1楼 · 发布于 2024-05-14 06:29:46

问题是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实例的预期行为。

b''上对字符串进行join编辑之后,您可以decode该字符串:

print(b''.join(comments).decode())

或者,decode每个comments元素的mapjoin在空字符串''上,正如您最初尝试的那样:

print(''.join(map(bytes.decode, comments)))

相关问题 更多 >