在使用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:操作数不能与形状一起广播