【问题标题】:TypeError: sequence item 0 expected str instance, bytes found类型错误:序列项 0 预期的 str 实例,找到字节
【发布时间】:2017-02-02 02:08:23
【问题描述】:

我正在做一个 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' 视为一个字符并打印它,但是,我不希望那样。我怎样才能让它发挥作用?

【问题讨论】:

    标签: python string python-3.x


    【解决方案1】:

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

    您可以在joined 上b''decode 后的字符串:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多