AttributeError: ‘list’ 对象没有属性 ‘replace’
AttributeError: ‘list’ object has no attribute ‘replace’
replace()
Python “AttributeError: ‘list’ object has no attribute ‘replace’” 发生在我们在列表而不是字符串上调用方法时。
要解决该错误,请调用replace()
字符串,例如通过访问特定索引处的列表或遍历列表。
下面是错误如何发生的示例。
my_list = ['bobby', 'hadz'] # ⛔️ AttributeError: 'list' object has no attribute 'replace' my_list.replace('b', '_')
我们创建了一个包含 2 个元素的列表,并尝试调用replace()
导致错误的列表上的方法。
replace()
方法是特定于字符串的,因此我们必须在字符串而不是列表对象上调用它。访问特定索引处的列表
解决错误的一种方法是在调用之前访问特定索引处的列表replace()
。
my_list = ['bobby', 'hadz'] result = my_list[0].replace('b', '_') print(result) # 👉️ "_o__y"
我们访问了索引处的列表元素0
并调用了replace()
字符串上的方法。
Python 索引是从零开始的,因此列表中的第一项的索引为0
,最后一项的索引为-1
或len(a_list) - 1
。
对列表中的每个字符串调用 replace() 方法
replace()
如果您需要对列表中的每个字符串调用该方法,请使用列表理解。
my_list = ['hello', 'world'] new_list = [element.replace('l', '_') for element in my_list] print(new_list) # 👉️ ['he__o', 'wor_d']
或者,您可以使用for 循环replace
对列表中的每个字符串调用该方法。
my_list = ['hello', 'world'] for word in my_list: result = word.replace('l', '_') print(result) # 👉️ "he__o", "wor_d"
我们使用for
循环遍历列表并replace()
在每个字符串上调用该方法。
str.replace方法返回字符串的副本,其中所有出现的子字符串都被提供的替换项替换。
该方法采用以下参数:
姓名 | 描述 |
---|---|
老的 | 字符串中我们要替换的子串 |
新的 | 每次出现的替换old |
数数 | count 只替换第一次出现的(可选) |
replace()
当我们尝试在列表而不是字符串上调用该方法时会发生错误。在调用 join() 之前将列表转换为字符串
您还可以String.join()
在调用该方法之前使用该方法将列表转换为字符串replace()
。
my_list = ['bobby', 'hadz'] a_str = ' '.join(my_list) result = a_str.replace('b', '_') print(result) # 👉️ _o__y hadz
We called the str.join()
method with a space separator, but you can use any
other value.
my_list = ['bobby', 'hadz'] a_str = '@'.join(my_list) result = a_str.replace('b', '_') print(result) # 👉️ _o__y@hadz
If you want to join the list without a separator, call the method on an empty
string.
my_list = ['bobby', 'hadz'] a_str = ''.join(my_list) result = a_str.replace('b', '_') print(result) # 👉️ _o__yhadz
The str.join method takes an
iterable as an argument and returns a string which is the concatenation of the
strings in the iterable.
Note that the method raises a TypeError
if there are any non-string values in
the iterable.
If your iterable contains numbers or other types, convert all of the values to
strings before calling join()
.
my_list = ['bobby', 1, 'hadz', 2] list_of_strings = list(map(str, my_list)) a_str = ''.join(list_of_strings) result = a_str.replace('b', '_') print(result) # 👉️ _o__y1hadz2
We used the map()
function to convert the integers in the list to strings
before calling the join()
method.
# Make sure to call the replace()
method on a string
To solve the error, you either have to correct the assignment of the variable
and make sure to call replace()
on a string, or call replace()
on an element
in the list that is of type string
.
You can either access the list at a specific index, e.g. my_list[0]
or use a
for loop to iterate over the list if you have to call replace()
on each
element.
You can view all the attributes an object has by using the dir()
function.
my_list = ['a', 'b', 'c'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
If you pass a class to the dir()
function, it returns a list of names of the class’s attributes, and recursively
of the attributes of its bases.
If you try to access any attribute that is not in this list, you would get the
“AttributeError: list object has no attribute” error.
由于replace()
不是lists实现的方法,所以报错。