Python 中 如何解决:TypeError: a bytes-like object is required, not ‘str’

Python TypeError

下面的代码在 Python 2.7 中正常工作:

with open(fname, 'rb') as f:
    lines = [x.strip() for x in f.readlines()]

for line in lines:
    tmp = line.strip().lower()
    if 'some-pattern' in tmp: continue
    # ... codeCode language: PHP (php)

在Python 3.5 中运行,出现下面的错误:

TypeError: a bytes-like object is required, not 'str'Code language: JavaScript (javascript)

解决方案1

这个问题主要是以二进制模式打开文件导致的,可以尝试用文本方式打开

with open(fname, 'rt') as f:
    lines = [x.strip() for x in f.readlines()]Code language: JavaScript (javascript)

解决方案2

可以使用.encode()来编码的字符串

例子:

'Hello World'.encode()Code language: JavaScript (javascript)

正如错误所述,为了将字符串写入文件,需要先将其编码为类似字节的对象

解决方案3

在添加到列表时解码:

with open(fname, 'rb') as f:
    lines = [x.decode('utf8').strip() for x in f.readlines()]Code language: JavaScript (javascript)

bytes 类型是在 Python 3 中引入的,在 Python 2 中没有字节数据类型:

>>> s=bytes('hello')
>>> type(s)
<type 'str'>Code language: JavaScript (javascript)

发表评论