如何修复:类型错误预期的字符串或类字节对象

221 阅读1分钟

在使用Python时,你可能遇到的一个错误是:

TypeError: expected string or bytes-like object

这个错误通常发生在你试图使用**re.sub()**函数来替换一个对象中的某些模式,但你所处理的对象并非完全由字符串组成。

下面的例子显示了如何在实践中解决这个错误。

如何重现这个错误

假设我们有下面的数值列表:

#define list of values
x = [1, 'A', 2, 'B', 5, 'C', 'D', 'E']

现在假设我们试图用一个空字符串来替换列表中的每个非字母:

import re

#attempt to replace each non-letter with empty string
x = re.sub('[^a-zA-Z]', '', x)

TypeError: expected string or bytes-like object

我们会收到一个错误,因为列表中的某些值不是字符串。

如何修复该错误

解决这个错误的最简单的方法是用**str()**操作符将列表转换为一个字符串对象:

import re

#replace each non-letter with empty string
x = re.sub('[^a-zA-Z]', '', str(x))

#display results
print(x)

ABCDE

注意,我们没有收到错误,因为我们首先使用**str()**将列表转换为字符串对象。

结果是原始列表,每个非字母都被替换成了空白。

注意:你可以在这里找到re.sub()函数的完整文档。

其他资源

下面的教程解释了如何修复 Python 中的其它常见错误:

如何修复Pandas中的KeyError
如何修复ValueError: 无法将浮点数NaN转换为整数
如何修复ValueError:操作数不能与形状一起广播