目录
AttributeError: ‘list’ object has no attribute ‘X’ in Python
- AttributeError:“列表”对象在 Python 中没有属性“X”
- AttributeError:“列表”对象没有属性“ITEMS”
- AttributeError: ‘list’ 对象没有属性 ‘LEN’
- AttributeError: ‘list’ 对象没有属性 ‘LOWER’
- AttributeError: ‘list’ 对象没有属性 ‘STRIP’
- AttributeError: ‘list’ 对象没有属性 ‘VALUES’ 或 ‘KEYS’
- AttributeError: ‘list’ 对象没有属性 ‘ENCODE’
- AttributeError: ‘list’ 对象没有属性 ‘GET’
- AttributeError: ‘list’ 对象没有属性 ‘STARTSWITH’
- AttributeError: ‘list’ 对象没有属性 ‘JOIN’
AttributeError: ‘list’ 对象在 Python 中没有属性 ‘X’
当我们访问列表中不存在的属性时,会出现 Python“AttributeError: ‘list’ object has no attribute”。
要解决该错误,请访问特定索引处的列表元素或更正分配。
下面是错误如何发生的示例。
my_list = ['bobby_hadz', 'dot_com'] # 👈️ list # ⛔️ AttributeError: 'list' object has no attribute 'split' result = my_list.split('_')
我们创建了一个包含 2 个元素的列表,并尝试调用split()
导致错误的列表上的方法。
在访问属性之前访问特定索引处的列表
为了解决这种情况下的错误,我们必须访问特定索引处的列表,因为它split
是字符串上的方法。
my_list = ['bobby_hadz', 'dot_com'] # 👈️ list result = my_list[0].split('_') print(result) # 👉️ ['bobby', 'hadz']
我们访问索引处的列表0
以调用split()
第一个列表元素上的方法。
对列表中的每个元素调用一个方法
如果您尝试对列表中的每个元素调用方法,请使用 for 循环遍历列表。
my_list = ['bobby', 'hadz', 'com'] new_list = [] for word in my_list: new_list.append(word.upper()) result = word.upper() # BOBBY # HADZ # COM print(result) print(new_list) # 👉️ ['BOBBY', 'HADZ', 'COM']
我们使用for 循环遍历列表并调用方法upper()
将每个字符串大写。
如果需要对列表中的每个元素调用函数,也可以使用
列表理解。
my_list = ['bobby', 'hadz'] new_list = [item.upper() for item in my_list] print(new_list) # 👉️ ['BOBBY', 'HADZ']
使用分隔符将列表连接成字符串
如果您打算将列表连接到带有分隔符的字符串中,请改为join()
调用字符串分隔符上的方法。
my_list = '_'.join(['bobby', 'hadz', 'com']) print(my_list) # 👉️ 'bobby_hadz_com' without_separator = ''.join(['bobby', 'hadz', 'com']) print(without_separator) # 👉️ 'bobbyhadzcom' mixed_list = [0, 'bobby', 1, 'hadz'] a_str = ','.join(str(element) for element in mixed_list) print(a_str) # 👉️ 0,bobby,1,hadz
str.join方法将一个可迭代对象作为参数并返回一个字符串,该字符串是可迭代对象中字符串的串联。
TypeError
请注意,如果可迭代对象中有任何非字符串值,该方法将引发 a 。
检查列表是否包含元素
错误的一个常见来源是尝试使用一种list.find()
方法。
my_list = ['apple', 'banana', 'kiwi'] # ⛔️ AttributeError: 'list' object has no attribute 'find' print(my_list.find('banana'))
我们创建了一个元素列表3
,并尝试在其上调用find()
导致错误的方法,因为它find()
是一个字符串方法。
如果您需要检查某个值是否在列表中,请使用in
运算符。
my_list = ['apple', 'banana', 'kiwi'] if 'banana' in my_list: print('banana is in the list') # 👉️ this runs else: print('banana is not in the list')
如果值在列表中,则运算符返回,否则in
返回
。True
false
获取列表中某个值的索引
如果您需要获取列表中某个值的索引,请使用该index()
方法。
my_list = ['apple', 'banana', 'kiwi'] result = my_list.index('banana') print(result) # 👉️ 1
该list.index()
方法返回其值等于提供的参数的第一个项目的索引。
向列表中添加元素
如果需要将单个元素添加到列表中,请使用list.append()
方法。
a_list = ['bobby', 'hadz'] a_list.append('com') print(a_list) # 👉️ ['bobby', 'hadz', 'com']
如果需要向列表中添加多个元素,请使用list.extend()
方法。
a_list = ['bobby'] a_list.extend(['hadz', 'com']) print(a_list) # 👉️ ['bobby', 'hadz', 'com']
检查一个对象是否包含一个属性
如果需要检查对象是否包含属性,请使用该
hasattr()
函数。
example = ['bobby', 'hadz', 'com'] if hasattr(example, 'my_attribute'): print(example.my_attribute) else: print('Attribute is not present on object') # 👉️ this runs
hasattr函数
采用以下 2 个参数:
姓名 | 描述 |
---|---|
object |
我们要测试属性是否存在的对象 |
name |
对象中要检查的属性的名称 |
如果字符串是对象属性之一的名称,则函数hasattr()
返回,否则返回。True
False
hasattr
如果该属性在对象上不存在,则使用该函数将处理错误,但是,您仍然必须弄清楚在代码中为变量分配列表值的位置。追踪变量被分配列表的位置并更正分配
如果您错误地创建了一个列表,请追踪变量被分配列表的位置并更正分配。
使用字典而不是列表
如果您打算使用字典,请将键值对括在花括号中。
my_dict = {'name': 'Bobby Hadz', 'age': 30} print(my_dict['name']) # 👉️ "Bobby Hadz" print(my_dict['age']) # 👉️ 30
字典用于存储键值对。
创建一个类并访问属性
如果您打算创建一个类并访问其属性,请声明一个类并将其实例化。
class Employee(): def __init__(self, name, age): self.name = name self.age = age # 👇️ create instance emp = Employee('Bobby Hadz', 30) # 👇️ access attributes print(emp.name) # 👉️ "Bobby hadz" print(emp.age) # 👉️ 30
您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['bobby', 'hadz', 'com'] # ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
针对特定方法解决错误的例子
下面是一些解决具体方法错误的例子。单击链接导航到副标题。
- AttributeError: ‘list’ 对象没有属性 ‘items’
- AttributeError: ‘list’ 对象没有属性 ‘len’
- AttributeError: ‘list’ 对象没有属性 ‘lower’
- AttributeError: ‘list’ 对象没有属性 ‘strip’
- AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
- AttributeError: ‘list’ 对象没有属性 ‘encode’
- AttributeError: ‘list’ 对象没有属性 ‘get’
- AttributeError: ‘list’ 对象没有属性 ‘startswith’
- AttributeError: ‘list’ 对象没有属性 ‘join’
AttributeError: ‘list’ 对象没有属性 ‘items’
items()
当我们在列表而不是字典上调用方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘items’” 。
要解决该错误,请调用items()
字典,例如通过访问特定索引处的列表或遍历列表。
下面是错误如何发生的示例。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Alice'}, ] # ⛔️ AttributeError: 'list' object has no attribute 'items' print(my_list.items())
我们创建了一个包含 3 个字典的列表,并尝试调用items()
列表中导致错误的方法,因为这items()
是一个字典方法。
解决该错误的一种方法是访问特定索引处的列表元素。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Alice'}, ] result = list(my_list[0].items()) print(result) # 👉️ [('id', 1), ('name', 'Alice')]
我们访问了列表中的第一个元素(字典)并调用了该items()
方法。
如果您需要items()
在列表中的所有词典上调用该方法,请使用
for
循环。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Carl'}, ] for person in my_list: print(person.items())
dict.items
方法返回字典项((键,值)对)的新视图。
my_dict = {'id': 1, 'name': 'Alice'} print(my_dict.items()) # 👉️ dict_items([('id', 1), ('name', 'Alice')])
字典是包含在花括号中的键值对的集合,而列表是一系列以逗号分隔的项目。
如果您需要在列表中查找字典,请使用
生成器表达式。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Carl'}, ] result = next( (item for item in my_list if item['name'] == 'Bobby Hadz'), {} ) print(result) # 👉️ {'id': 2, 'name': 'Bobby Hadz'} print(result.get('name')) # 👉️ "Bobby Hadz" print(result.get('id')) # 👉️ 2 print(result.items()) # 👉️ dict_items([('id', 2), ('name', 'Bobby Hadz')])
示例中的生成器表达式查找name
具有值为 的键的字典Bob
并返回该字典。
name
值为 的键Bob
,生成器表达式将返回一个空字典。如果您需要在列表中查找所有符合条件的词典,请使用该
filter()
函数。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Alice'}, ] new_list = list( filter(lambda person: person.get('name') == 'Alice', my_list) ) # 👇️ [{'id': 1, 'name': 'Alice'}, {'id': 3, 'name': 'Alice'}] print(new_list)
items()
当我们尝试在列表而不是字典上调用该方法时会发生错误。您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['bobby', 'hadz', 'com'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
由于items()
不是lists实现的方法,所以报错。
- AttributeError: ‘list’ 对象没有属性 ‘len’
- AttributeError: ‘list’ 对象没有属性 ‘lower’
- AttributeError: ‘list’ 对象没有属性 ‘strip’
- AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
- AttributeError: ‘list’ 对象没有属性 ‘encode’
- AttributeError: ‘list’ 对象没有属性 ‘get’
- AttributeError: ‘list’ 对象没有属性 ‘startswith’
- AttributeError: ‘list’ 对象没有属性 ‘join’
AttributeError: ‘list’ 对象没有属性 ‘len’
len
当我们访问列表中的属性时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘len’” 。
要解决错误,请将列表传递给len
函数以获取其长度,例如len(['a', 'b'])
.
下面是错误如何发生的示例。
my_list = ['apple', 'banana', 'kiwi'] # ⛔️ AttributeError: 'list' object has no attribute 'len' print(my_list.len())
错误是由于列表对象没有属性引起的len
。
要获取列表的长度,请将其传递给函数len()
。
my_list = ['apple', 'banana', 'kiwi'] result = len(my_list) print(result) # 👉️ 3
len ()函数返回对象的长度(项目数)。
如果您需要获取列表中某项的长度,请访问特定索引处的列表。
my_list = ['apple', 'banana', 'kiwi'] result = len(my_list[0]) print(result) # 👉️ 5
我们访问索引处的列表0
并将结果传递给长度函数。
如果需要获取列表中每个元素的长度,请使用循环for
。
my_list = ['apple', 'banana', 'kiwi'] for fruit in my_list: print(len(fruit))
您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['a', 'b', 'c'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到错误。
- AttributeError: ‘list’ 对象没有属性 ‘lower’
- AttributeError: ‘list’ 对象没有属性 ‘strip’
- AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
- AttributeError: ‘list’ 对象没有属性 ‘encode’
- AttributeError: ‘list’ 对象没有属性 ‘get’
- AttributeError: ‘list’ 对象没有属性 ‘startswith’
- AttributeError: ‘list’ 对象没有属性 ‘join’
AttributeError: ‘list’ 对象没有属性 ‘lower’
lower()
当我们在列表而不是字符串上调用方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘lower’” 。
要解决该错误,请调用lower()
字符串,例如通过访问特定索引处的列表或遍历列表。
下面是错误如何发生的示例。
my_list = ['BOBBY', 'HADZ'] # ⛔️ AttributeError: 'list' object has no attribute 'lower' my_list.lower()
我们创建了一个包含 2 个元素的列表,并尝试调用lower()
导致错误的列表上的方法。
lower()
方法是特定于字符串的,因此我们必须在字符串而不是列表对象上调用它。 在调用之前访问索引处的列表lower()
解决错误的一种方法是在调用之前访问特定索引处的列表lower()
。
my_list = ['BOBBY', 'HADZ'] result = my_list[0].lower() print(result) # 👉️ "bobby"
我们访问了索引处的列表元素0
并调用了lower()
字符串上的方法。
调用lower()
列表中的每个元素
lower()
如果您需要对列表中的每个字符串调用该方法,请使用列表理解。
my_list = ['BOBBY', 'HADZ'] new_list = [word.lower() for word in my_list] print(new_list) # 👉️ ['bobby', 'hadz']
如果您的列表包含非字符串值,请使用if/else
语句仅调用
lower()
字符串。
my_list = ['BOBBY', 0, 'HADZ', 1] new_list = [word.lower() if isinstance(word, str) else word for word in my_list] print(new_list) # 👉️ ['bobby', 0, 'hadz', 1]
或者,您可以使用循环对列表中的每个字符串for
调用该方法。lower()
my_list = ['BOBBY', 'HADZ', 'COM'] new_list = [] for word in my_list: new_list.append(word.lower()) result = word.lower() print(result) print(new_list) # 👉️ ['bobby', 'hadz', 'com']
我们使用for
循环遍历列表并lower()
在每个字符串上调用该方法。
str.lower方法返回字符串的副本,其中所有大小写字符都转换为小写。
该方法不会更改原始字符串,它会返回一个新字符串。字符串在 Python 中是不可变的。
追踪变量分配列表的位置
lower()
当我们尝试在列表而不是字符串上调用该方法时会发生错误。
要解决该错误,您要么必须更正变量的赋值并确保调用lower()
字符串,要么调用lower()
列表中类型为 的元素string
。
my_list[0]
lower()
您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['bobby', 'hadz', 'com'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
由于lower()
不是lists实现的方法,所以报错。
- AttributeError: ‘list’ 对象没有属性 ‘strip’
- AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
- AttributeError: ‘list’ 对象没有属性 ‘encode’
- AttributeError: ‘list’ 对象没有属性 ‘get’
- AttributeError: ‘list’ 对象没有属性 ‘startswith’
- AttributeError: ‘list’ 对象没有属性 ‘join’
AttributeError: ‘list’ 对象没有属性 ‘strip’
Python “AttributeError: ‘list’ object has no attribute ‘strip’” 发生在我们在strip()
列表而不是字符串上调用该方法时。
要解决该错误,请调用strip()
字符串,例如通过访问特定索引处的列表或遍历列表。
下面是错误如何发生的示例。
my_list = [' hello ', ' world '] # ⛔️ AttributeError: 'list' object has no attribute 'strip' my_list.strip()
我们创建了一个包含 2 个元素的列表,并尝试调用strip()
导致错误的列表上的方法。
strip()
方法是特定于字符串的,因此我们必须在字符串而不是列表对象上调用它。解决错误的一种方法是在调用之前访问特定索引处的列表strip()
。
my_list = [' hello ', ' world '] result = my_list[0].strip() print(result) # 👉️ "hello"
我们访问了索引处的列表元素0
并调用了strip()
字符串上的方法。
strip()
如果您需要对列表中的每个字符串调用该方法,请使用列表理解。
my_list = [' hello ', ' world '] new_list = [word.strip() for word in my_list] print(new_list) # 👉️ ['hello', 'world']
或者,您可以使用循环对列表中的每个字符串for
调用该方法。strip()
my_list = [' hello ', ' world '] for word in my_list: result = word.strip() print(result) # 👉️ "hello", "world"
我们使用for
循环遍历列表并strip()
在每个字符串上调用该方法。
str.strip方法返回删除了前导和尾随空格的字符串副本。
该方法不改变原来的字符串,它返回一个新的字符串。字符串在 Python 中是不可变的。
strip()
当我们尝试在列表而不是字符串上调用该方法时会发生错误。要解决该错误,您要么必须更正变量的赋值并确保调用strip()
字符串,要么调用strip()
列表中类型为 的元素string
。
您可以访问特定索引处的列表,例如,如果您必须调用每个元素,my_list[0]
则可以使用 for 循环遍历列表。strip()
您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['a', 'b', 'c'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
由于strip()
不是lists实现的方法,所以报错。
- AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
- AttributeError: ‘list’ 对象没有属性 ‘encode’
- AttributeError: ‘list’ 对象没有属性 ‘get’
- AttributeError: ‘list’ 对象没有属性 ‘startswith’
- AttributeError: ‘list’ 对象没有属性 ‘join’
AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
values()
当我们在列表而不是字典上调用方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘values’” 。
要解决该错误,请调用values()
字典,例如通过访问特定索引处的列表或遍历列表。
下面是错误如何发生的示例。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Carl'}, ] # ⛔️ AttributeError: 'list' object has no attribute 'values' print(my_list.values()) # ⛔️ AttributeError: 'list' object has no attribute 'keys' print(my_list.keys())
我们创建了一个包含 3 个字典的列表,并尝试调用列表中的values()
和
方法。keys()
这导致了错误,因为values()
和keys()
是字典方法。
在调用方法之前访问特定索引处的列表元素
解决该错误的一种方法是访问特定索引处的列表元素。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Carl'}, ] values = list(my_list[0].values()) print(values) # 👉️ [1, 'Alice'] keys = list(my_list[0].keys()) print(keys) # 👉️ ['id', 'name']
0
在调用dict.values()
and
方法之前,我们访问了索引处的列表元素dict.keys()
。
如果您需要values()
在列表中的所有词典上调用该方法,请使用
for
循环。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Carl'}, ] for person in my_list: print(person.keys()) print(person.values())
dict.values方法返回字典值的新视图。
my_dict = {'id': 1, 'name': 'Bobby Hadz'} print(my_dict.values()) # 👉️ dict_values([1, 'Alice']) print(my_dict.keys()) # 👉️ dict_values(['id', 'name'])
dict.keys方法返回字典键的新视图。
一个dict.values()
视图与另一个视图之间的相等性比较将始终返回False
。这也适用于dict.values()
与自身进行比较。
在调用 values() 或 keys() 之前在列表中查找字典
如果您需要在列表中查找字典,请使用生成器表达式。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Carl'}, ] result = next( (item for item in my_list if item['name'] == 'Bobby Hadz'), {} ) print(result) # 👉️ {'id': 2, 'name': 'Bobby Hadz'} print(result.get('name')) # 👉️ "Bobby Hadz" print(result.get('id')) # 👉️ 2 print(result.values()) # 👉️ dict_values([2, 'Bobby Hadz']) print(result.keys()) # 👉️ dict_keys(['id', 'name'])
示例中的生成器表达式查找name
具有值为 的键的字典Bob
并返回该字典。
name
值为 的键Bobby Hadz
,则生成器表达式将返回一个空字典。查找列表中所有满足条件的字典
如果您需要在列表中查找所有符合条件的词典,请使用该
filter()
函数。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bobby Hadz'}, {'id': 3, 'name': 'Alice'}, ] new_list = list( filter(lambda person: person.get('name') == 'Alice', my_list) ) # 👇️ [{'id': 1, 'name': 'Alice'}, {'id': 3, 'name': 'Alice'}] print(new_list)
keys()
同样,当我们尝试在列表而不是字典上调用方法时,会出现“AttributeError: ‘list’ object has no attribute ‘keys’”错误。
您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['bobby', 'hadz', 'com'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
由于values()
不是lists实现的方法,所以报错。
- AttributeError: ‘list’ 对象没有属性 ‘encode’
- AttributeError: ‘list’ 对象没有属性 ‘get’
- AttributeError: ‘list’ 对象没有属性 ‘startswith’
- AttributeError: ‘list’ 对象没有属性 ‘join’
AttributeError: ‘list’ 对象没有属性 ‘encode’
encode()
当我们在列表而不是字符串上调用方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘encode’” 。
要解决该错误,请调用encode()
字符串,例如通过访问特定索引处的列表或遍历列表。
下面是错误如何发生的示例。
my_list = ['bobby', 'hadz', 'com'] # ⛔️ AttributeError: 'list' object has no attribute 'encode' my_list.encode('utf-8')
我们创建了一个包含 3 个元素的列表,并尝试调用encode()
导致错误的列表上的方法。
encode()
方法是特定于字符串的,因此我们必须在字符串而不是列表对象上调用它。解决错误的一种方法是在调用之前访问特定索引处的列表encode()
。
my_list = ['bobby', 'hadz', 'com'] result = my_list[0].encode('utf-8') print(result) # 👉️ b'bobby'
我们访问了索引处的列表元素0
并调用了encode()
字符串上的方法。
encode()
如果您需要对列表中的每个字符串调用该方法,请使用列表理解。
my_list = ['bobby', 'hadz', 'com'] new_list = [word.encode('utf-8') for word in my_list] print(new_list) # 👉️ [b'bobby', b'hadz', b'com']
或者,您可以使用循环对列表中的每个字符串for
调用该方法。encode()
my_list = ['bobby', 'hadz', 'com'] for word in my_list: result = word.encode('utf-8') print(result)
我们使用for
循环遍历列表并encode()
在每个字符串上调用该方法。
str.encode方法将字符串的编码版本作为字节对象返回。默认编码为
utf-8
.
encode()
当我们尝试在列表而不是字符串上调用方法时,就会发生这种情况。要解决该错误,您要么必须更正变量的赋值并确保调用encode()
字符串,要么调用encode()
列表中类型为 的元素string
。
您可以访问特定索引处的列表,例如,如果您必须调用每个元素,my_list[0]
则可以使用 for 循环遍历列表。encode()
您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['bobby', 'hadz', 'com'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
由于encode()
不是lists实现的方法,所以报错。
- AttributeError: ‘list’ 对象没有属性 ‘get’
- AttributeError: ‘list’ 对象没有属性 ‘startswith’
- AttributeError: ‘list’ 对象没有属性 ‘join’
AttributeError: ‘list’ 对象没有属性 ‘get’
Python “AttributeError: ‘list’ object has no attribute ‘get’” 发生在我们在get()
列表而不是字典上调用方法时。
要解决该错误,请调用get()
字典,例如通过访问特定索引处的列表或遍历列表。
下面是错误如何发生的示例。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Carl'}, ] # ⛔️ AttributeError: 'list' object has no attribute 'get' my_list.get('name')
我们创建了一个包含 3 个字典的列表,并尝试调用get()
列表中导致错误的方法,因为这get()
是一个字典方法。
解决该错误的一种方法是访问特定索引处的列表元素。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Carl'}, ] result = my_list[0].get('name') print(result) # 👉️ "Alice"
我们在索引处访问列表元素0
并使用该get()
方法获取name
键的值。
如果您需要在列表中查找字典,请使用生成器表达式。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Carl'}, ] result = next( (item for item in my_list if item['name'] == 'Bob'), {} ) print(result) # 👉️ {'id': 2, 'name': 'Bob'} print(result.get('name')) # 👉️ "Bob" print(result.get('id')) # 👉️ 2
示例中的生成器表达式查找name
具有值为 的键的字典Bob
并返回该字典。
name
值为 的键Bob
,生成器表达式将返回一个空字典。如果您需要在列表中查找所有符合条件的词典,请使用该
filter()
函数。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Alice'}, ] new_list = list( filter(lambda person: person.get('name') == 'Alice', my_list) ) # 👇️ [{'id': 1, 'name': 'Alice'}, {'id': 3, 'name': 'Alice'}] print(new_list)
如果您需要get()
在列表中的每个字典上使用该方法,请使用for
循环遍历列表。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Carl'}, ] new_list = [] for person in my_list: new_list.append(person.get('name')) print(person.get('name')) print(new_list) # 👉️ ['Alice', 'Bob', 'Carl']
我们使用 for 循环遍历列表,并且在每次迭代中我们使用该
方法来获取字典属性get()
的值。name
可以使用列表理解重写该示例。
my_list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Carl'}, ] new_list = [person.get('name') for person in my_list] print(new_list) # 👉️ ['Alice', 'Bob', 'Carl']
如果键在字典中,则 dict.get 方法返回给定键的值,否则返回默认值。
该方法采用以下 2 个参数:
姓名 | 描述 |
---|---|
钥匙 | 返回值的键 |
默认 | 如果字典中不存在提供的键,则返回默认值(可选) |
default
如果未提供参数值,则默认为None
,因此该get()
方法永远不会引发KeyError
.
get()
当我们尝试在列表而不是字典上调用该方法时会发生错误。您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['a', 'b', 'c'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
由于get()
不是lists实现的方法,所以报错。
AttributeError: ‘list’ 对象没有属性 ‘startswith’
startswith()
当我们在列表而不是字符串上调用方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘startswith’” 。
要解决该错误,请调用startswith()
字符串,例如通过访问特定索引处的列表或遍历列表。
下面是错误如何发生的示例。
my_list = ['apple', 'apricot', 'banana'] # ⛔️ AttributeError: 'list' object has no attribute 'startswith' if my_list.startswith('ap'): print('success')
我们创建了一个包含 3 个元素的列表,并尝试调用startswith()
导致错误的列表上的方法。
startswith()
方法是特定于字符串的,因此我们必须在字符串而不是列表对象上调用它。解决错误的一种方法是在调用之前访问特定索引处的列表startswith()
。
my_list = ['apple', 'apricot', 'banana'] if my_list[0].startswith('ap'): print('string starts with ap')
我们访问了索引处的列表元素0
并调用了startswith()
字符串上的方法。
如果需要startswith()
对列表中的每个字符串调用该方法,请使用循环
for
。
my_list = ['apple', 'apricot', 'banana'] for word in my_list: if word.startswith('ap'): print('string starts with ap')
我们使用for
循环遍历列表并startswith()
在每个字符串上调用该方法。
如果字符串以提供的前缀开头,则 str.startswith 方法返回,否则该
方法返回。True
False
startswith()
当我们尝试在列表而不是字符串上调用该方法时会发生错误。要解决该错误,您要么必须更正变量的赋值并确保调用startswith()
字符串,要么调用startswith()
列表中类型为 的元素string
。
您可以访问特定索引处的列表,例如,如果您必须调用每个元素,my_list[0]
则可以使用 for 循环遍历列表。startswith()
您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['a', 'b', 'c'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
由于startswith()
不是lists实现的方法,所以报错。
AttributeError: ‘list’ 对象没有属性 ‘join’
join()
当我们在列表对象上调用该方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘join’” 。
要解决该错误,请调用join
字符串分隔符上的方法并将列表作为参数传递给join
,例如'-'.join(['a','b'])
。
下面是错误如何发生的示例。
my_list = ['a', 'b', 'c'] # ⛔️ AttributeError: 'list' object has no attribute 'join' my_str = my_list.join('-')
我们试图调用join()
导致错误的列表中的方法。
要解决该错误,请调用join()
字符串分隔符上的方法并将列表作为参数传递给它。
my_list = ['a', 'b', 'c'] my_str = '-'.join(my_list) print(my_str) # 👉️ "a-b-c"
str.join方法将一个可迭代对象作为参数并返回一个字符串,该字符串是可迭代对象中字符串的串联。
调用该方法的字符串用作元素之间的分隔符。
如果您不需要分隔符而只想将列表元素连接成一个字符串,请join()
在空字符串上调用该方法。
my_list = ['a', 'b', 'c'] my_str = ''.join(my_list) print(my_str) # 👉️ "abc"
请注意,如果可迭代对象中有任何非字符串值,该join()
方法将引发 a 。TypeError
如果您的列表包含数字或其他类型,请在调用之前将所有值转换为字符串join()
。
my_list = ['a', 'b', 1, 2] all_strings = list(map(str, my_list)) print(all_strings) # 👉️ ['a', 'b', '1', '2'] result = ''.join(all_strings) print(result) # 👉️ "ab12"
join()
当我们尝试在列表而不是字符串上调用方法时,就会发生这种情况。要解决该错误,您必须对字符串调用该方法并将列表作为参数传递给join()
.
您可以使用该功能查看对象具有的所有属性dir()
。
my_list = ['a', 'b', 'c'] # 👉️ [... 'append', 'clear', 'copy', 'count', 'extend', 'index', # 'insert', 'pop', 'remove', 'reverse', 'sort' ...] print(dir(my_list))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:列表对象没有属性”错误。
由于join()
不是lists实现的方法,所以报错。