python3 TypeError:“字节”对象不可调用

时间:2018-10-22 06:30:51

标签: python python-3.x

我的代码:

 for i in range(data.num_nodes):
        if embed[i]:
            # print embed[i]
            tmp = np.sum(embed[i], axis=0) / len(embed[i])
            file.write(' '.join(map(str.encode("utf-8"), tmp)) + '\n')
        else:
            file.write('\n')

但是,当我运行代码时,我得到:

file.write(' '.join(map(str.encode("utf-8"), tmp)) + '\n')
`TypeError: 'bytes' object is not callable`

当我将代码更改为此:

  for i in range(data.num_nodes):
        if embed[i]:
            # print embed[i]
            tmp = np.sum(embed[i], axis=0) / len(embed[i])
            file.write(' '.join(map(str, tmp)) + '\n')
        else:
            file.write('\n')

我收到此错误:

TypeError: a bytes-like object is required, not 'str'

2 个答案:

答案 0 :(得分:1)

要做:

file.write(' '.join(map(str.encode, tmp)) + '\n')

代替:

file.write(' '.join(map(str.encode("utf-8"), tmp)) + '\n')

因为str.encode需要一个字符串参数,所以这有效,因为默认情况下它已经utf-8编码

答案 1 :(得分:1)

for s in sheet_name: if s != 'Sheet1': wb.remove(wb[s]) 期望一个函数对象作为它的第一个参数,并且实际上使用map调用str.encode("utf-8")的{​​{1}}作为第一个参数,并对字符串{{1 }}转换为字节,因此当str.encode在其第一个参数中调用该函数时,由于实际上是一个字符串,因此它将失败。

您应使用'utf-8'参数将'utf-8'预先填充为所需的编码,将map传递给functools.partial str.encode作为函数对象,并将其作为函数对象: / p>

map

但是,由于str.encode的{​​{1}}参数的默认值为encoding,因此您可以通过传递{来使from functools import partial file.write(' '.join(map(partial(str.encode, encoding='utf-8'), tmp)) + '\n') 使用encoding的默认值直接从{1}}到str.encode

'utf-8'

但是由于您真正想做的是转换整个字符串,因此您将以字节的形式传递给map,包括str.encodestr.encode,它们都是字符串,而不是字节,则应在连接子字符串并使用map串联后对整个字符串进行编码:

file.write(' '.join(map(str.encode, tmp)) + '\n')

并且由于您的file.write不是字符串列表,而是' '对象的列表,因此在加入之前,应先将它们映射到字符串:

'\n'