AttributeError:“列表”对象在 Python 中没有属性“X”

目录

AttributeError: ‘list’ object has no attribute ‘X’ in Python

  1. AttributeError:“列表”对象在 Python 中没有属性“X”
  2. AttributeError:“列表”对象没有属性“ITEMS”
  3. AttributeError: ‘list’ 对象没有属性 ‘LEN’
  4. AttributeError: ‘list’ 对象没有属性 ‘LOWER’
  5. AttributeError: ‘list’ 对象没有属性 ‘STRIP’
  6. AttributeError: ‘list’ 对象没有属性 ‘VALUES’ 或 ‘KEYS’
  7. AttributeError: ‘list’ 对象没有属性 ‘ENCODE’
  8. AttributeError: ‘list’ 对象没有属性 ‘GET’
  9. AttributeError: ‘list’ 对象没有属性 ‘STARTSWITH’
  10. 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返回
Truefalse

获取列表中某个值的索引

如果您需要获取列表中某个值的索引,请使用该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()返回,否则返回。TrueFalse

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:列表对象没有属性”错误。

针对特定方法解决错误的例子

下面是一些解决具体方法错误的例子。单击链接导航到副标题。

  1. AttributeError: ‘list’ 对象没有属性 ‘items’
  2. AttributeError: ‘list’ 对象没有属性 ‘len’
  3. AttributeError: ‘list’ 对象没有属性 ‘lower’
  4. AttributeError: ‘list’ 对象没有属性 ‘strip’
  5. AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
  6. AttributeError: ‘list’ 对象没有属性 ‘encode’
  7. AttributeError: ‘list’ 对象没有属性 ‘get’
  8. AttributeError: ‘list’ 对象没有属性 ‘startswith’
  9. AttributeError: ‘list’ 对象没有属性 ‘join’

AttributeError: ‘list’ 对象没有属性 ‘items’

items()当我们在列表而不是字典上调用方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘items’” 。

要解决该错误,请调用items()字典,例如通过访问特定索引处的列表或遍历列表。

attributeerror 列表对象没有属性项

下面是错误如何发生的示例。

主程序
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实现的方法,所以报错。

  1. AttributeError: ‘list’ 对象没有属性 ‘len’
  2. AttributeError: ‘list’ 对象没有属性 ‘lower’
  3. AttributeError: ‘list’ 对象没有属性 ‘strip’
  4. AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
  5. AttributeError: ‘list’ 对象没有属性 ‘encode’
  6. AttributeError: ‘list’ 对象没有属性 ‘get’
  7. AttributeError: ‘list’ 对象没有属性 ‘startswith’
  8. AttributeError: ‘list’ 对象没有属性 ‘join’

AttributeError: ‘list’ 对象没有属性 ‘len’

len当我们访问列表中的属性时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘len’” 。

要解决错误,请将列表传递给len函数以获取其长度,例如len(['a', 'b']).

attributeerror 列表对象没有属性 len

下面是错误如何发生的示例。

主程序
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()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。

如果您尝试访问不在此列表中的任何属性,您将收到错误。

  1. AttributeError: ‘list’ 对象没有属性 ‘lower’
  2. AttributeError: ‘list’ 对象没有属性 ‘strip’
  3. AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
  4. AttributeError: ‘list’ 对象没有属性 ‘encode’
  5. AttributeError: ‘list’ 对象没有属性 ‘get’
  6. AttributeError: ‘list’ 对象没有属性 ‘startswith’
  7. 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

您可以访问特定索引处的列表,例如,如果您必须调用每个元素,则可以使用 for 循环遍历列表。 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实现的方法,所以报错。

  1. AttributeError: ‘list’ 对象没有属性 ‘strip’
  2. AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
  3. AttributeError: ‘list’ 对象没有属性 ‘encode’
  4. AttributeError: ‘list’ 对象没有属性 ‘get’
  5. AttributeError: ‘list’ 对象没有属性 ‘startswith’
  6. AttributeError: ‘list’ 对象没有属性 ‘join’

AttributeError: ‘list’ 对象没有属性 ‘strip’

Python “AttributeError: ‘list’ object has no attribute ‘strip’” 发生在我们在strip()列表而不是字符串上调用该方法时。

要解决该错误,请调用strip()字符串,例如通过访问特定索引处的列表或遍历列表。

attributeerror 列表对象没有属性条

下面是错误如何发生的示例。

主程序
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实现的方法,所以报错。

  1. AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’
  2. AttributeError: ‘list’ 对象没有属性 ‘encode’
  3. AttributeError: ‘list’ 对象没有属性 ‘get’
  4. AttributeError: ‘list’ 对象没有属性 ‘startswith’
  5. AttributeError: ‘list’ 对象没有属性 ‘join’

AttributeError: ‘list’ 对象没有属性 ‘values’ 或 ‘keys’

values()当我们在列表而不是字典上调用方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘values’” 。

要解决该错误,请调用values()字典,例如通过访问特定索引处的列表或遍历列表。

attributeerror 列表对象没有属性值

下面是错误如何发生的示例。

主程序
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())

attributeerror 列表对象没有属性键

我们创建了一个包含 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实现的方法,所以报错。

  1. AttributeError: ‘list’ 对象没有属性 ‘encode’
  2. AttributeError: ‘list’ 对象没有属性 ‘get’
  3. AttributeError: ‘list’ 对象没有属性 ‘startswith’
  4. AttributeError: ‘list’ 对象没有属性 ‘join’

AttributeError: ‘list’ 对象没有属性 ‘encode’

encode()当我们在列表而不是字符串上调用方法时,会出现 Python“AttributeError: ‘list’ object has no attribute ‘encode’” 。

要解决该错误,请调用encode()字符串,例如通过访问特定索引处的列表或遍历列表。

attributeerror 列表对象没有属性编码

下面是错误如何发生的示例。

主程序
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实现的方法,所以报错。

  1. AttributeError: ‘list’ 对象没有属性 ‘get’
  2. AttributeError: ‘list’ 对象没有属性 ‘startswith’
  3. AttributeError: ‘list’ 对象没有属性 ‘join’

AttributeError: ‘list’ 对象没有属性 ‘get’

Python “AttributeError: ‘list’ object has no attribute ‘get’” 发生在我们在get()列表而不是字典上调用方法时。

要解决该错误,请调用get()字典,例如通过访问特定索引处的列表或遍历列表。

attributeerror-list-object-has-no-attribute-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实现的方法,所以报错。

  1. AttributeError: ‘list’ 对象没有属性 ‘startswith’
  2. AttributeError: ‘list’ 对象没有属性 ‘join’

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 方法返回,否则

方法
返回TrueFalse

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实现的方法,所以报错。