AttributeError:“元组”对象在 Python 中没有属性 X

目录

AttributeError: ‘tuple’ object has no attribute in Python

  1. AttributeError:“元组”对象没有属性 X
  2. AttributeError: ‘tuple’ 对象没有属性 ‘append’
  3. AttributeError: ‘tuple’ 对象没有属性 ‘split’

AttributeError: ‘tuple’ 对象在 Python 中没有属性 X

当我们访问元组中不存在的属性时,会出现 Python“AttributeError: ‘tuple’ object has no attribute”。

要解决该错误,请使用列表而不是元组来访问列表方法或更正分配。

attributeerror 元组对象没有属性

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

主程序
example = 'bobby', 'hadz' print(type(example)) # 👉️ <class 'tuple'> # ⛔️ AttributeError: 'tuple' object has no attribute example.sort()

example变量存储 2 个值的元组。

主程序
example = 'bobby', 'hadz' print(example) # 👉️ ('bobby', 'hadz')
元组与列表非常相似,但实现的内置方法较少并且是不可变的(无法更改)。

使用列表而不是元组

如果您打算访问列表方法,请使用列表而不是元组。

主程序
example = ['bobby', 'hadz', 'com'] print(type(example)) # 👉️ <class 'list'> example.sort() print(example) # 👉️ ['bobby', 'com', 'hadz']

列表包含在方括号中[],元组包含在括号中
()

将元组转换为列表

您可以使用构造函数将元组转换为列表list()

主程序
my_tuple = ('bobby', 'hadz', 'com') # ✅ convert a tuple to list my_list = list(my_tuple) print(my_list) # 👉️ ['bobby', 'hadz', 'com'] print(type(my_list)) # 👉️ <class 'list'>

列表接受一个可迭代对象并返回一个列表对象。

元组在 Python 中是如何构造的

如果错误地创建了元组,则必须更正分配。

元组有多种构造方式:

  • 使用一对括号()创建一个空元组
  • 使用尾随逗号 –a,(a,)
  • 用逗号分隔项目 –a, b(a, b)
  • 使用tuple()构造函数

访问特定索引处的元组元素

如果您打算访问元组中特定索引处的元素,请使用方括号。

主程序
my_tuple = ('bobby', 'hadz', 'com') print(my_tuple[0].upper()) # 👉️ "BOBBY" print(my_tuple[1].upper()) # 👉️ "HADZ"
Python 索引是从零开始的,因此元组中的第一项的索引为,最后一项的索引为or 0-1 len(my_tuple) - 1

追踪变量被分配元组的位置

如果您错误地创建了元组,请跟踪为变量分配元组的位置并更正分配。

下面是一个通过用逗号分隔值来错误创建元组的示例。

主程序
def get_list(): return 'a', 'b' # 👈️ returns a tuple # 👇️ ('a', 'b') tuple result = get_list() # ⛔️ AttributeError: 'tuple' object has no attribute 'append' result.append('c')

get_list函数返回一个元组而不是列表,因为我们没有将值括在方括号中。

要更正这种情况下的错误,请将项目括在方括号中。

主程序
def get_list(): return ['a', 'b'] # 👇️ ['a', 'b'] list result = get_list() result.append('c') print(result) # 👉️ ['a', 'b', 'c']

确保在值后没有悬空的逗号,例如,a,因为(a, )
您可能错误地创建了元组。

元组对象只有很少的内置方法并且是不可变的(无法更改),因此您很可能打算创建不同类型的对象。

创建字典而不是元组

如果您打算创建字典,请将键值对括在花括号中。

主程序
employee = {'name': 'Bobby Hadz', 'age': 30} print(employee.get('name')) # 👉️ "Bobby Hadzz" print(employee['name']) # 👉️ "Bobby Hadz" print(employee['age']) # 👉️ 30

字典用于存储键值对。

只有 2 个方法可以用在元组对象上

您可能会在元组对象上使用的方法只有 2 种。

主程序
my_tuple = ('a', 'b', 'c', 'c') print(my_tuple.count('c')) # 👉️ 2 print(my_tuple.index('a')) # 👉️ 0

count方法返回值在元组中出现的次数,该index方法返回值在元组中的索引。

如果你需要改变序列,你必须使用 alist 因为元组是不可变的。

您可以使用该功能查看对象具有的所有属性dir()

主程序
my_tuple = ('a', 'b', 'c', 'c') # 👇️ [... 'count', 'index' ...] print(dir(my_tuple))

如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。

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

解决特定方法的错误

以下是解决特定方法错误的 2 个示例。单击链接导航到副标题。

  1. AttributeError: ‘tuple’ 对象没有属性 ‘append’
  2. AttributeError: ‘tuple’ 对象没有属性 ‘split’

AttributeError: ‘tuple’ 对象没有属性 ‘append’

append()当我们尝试在元组而不是列表上调用方法时,会出现 Python“AttributeError: ‘tuple’ object has no attribute ‘append’” 。

要解决该错误,请使用列表而不是元组,因为元组是不可变的。

attributeerror 元组对象没有附加属性

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

主程序
my_list = ('a', 'b') print(type(my_list)) # 👉️ <class 'tuple'> # ⛔️ AttributeError: 'tuple' object has no attribute 'append' my_list.append('c')

我们使用括号来包裹逗号分隔的元素,因此我们最终创建了一个元组对象。

元组与列表非常相似,但实现的内置方法较少并且是不可变的(无法更改)。

使用列表而不是元组

要解决错误,我们必须使用列表而不是元组。

主程序
my_list = ['a', 'b'] print(type(my_list)) # 👉️ <class 'list'> my_list.append('c') print(my_list) # 👉️ ['a', 'b', 'c']

我们将项目包装在方括号中以创建一个列表,并且我们能够调用该append()方法将项目添加到列表中。

请注意,要创建一个空列表,您将使用方括号,例如
my_list = []而不是圆括号。

将元组转换为列表

您可以使用构造函数将元组转换为列表list()

主程序
my_tuple = ('a', 'b') my_list = list(my_tuple) my_list.append('c') print(my_list) # 👉️ ['a', 'b', 'c']
元组对象实现的方法很少,因为它们是不可变的(无法更改)。这就是元组对象不实现像就地更改对象的方法的原因。 append()

请注意,该append()方法会改变原始列表,它不会返回新列表。

append()方法返回 None,因此不要将调用它的结果分配给变量。

如果你需要改变序列,你必须使用 alist因为元组是不可变的。

您可能会在元组对象上使用的方法只有 2 种。

主程序
my_tuple = ('a', 'b', 'c', 'c') print(my_tuple.count('c')) # 👉️ 2 print(my_tuple.index('a')) # 👉️ 0

count方法返回值在元组中出现的次数,该index方法返回值在元组中的索引。

您可以使用该功能查看对象具有的所有属性dir()

主程序
my_tuple = ('a', 'b', 'c', 'c') # 👇️ [... 'count', 'index' ...] print(dir(my_tuple))

如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。

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

AttributeError: ‘tuple’ 对象没有属性 ‘split’

split()当我们在元组而不是字符串上调用方法时,会出现 Python“AttributeError ‘tuple’ object has no attribute ‘split’” 。

要解决该错误,请更正变量的赋值或在调用时访问特定索引处的元组split()

attributeerror 元组对象没有属性拆分

确保你没有错误地声明一个元组

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

主程序
example = 'bobby,hadz', # 👈️ dangling comma declares tuple print(type(example)) # 👉️ <class 'tuple'> # ⛔️ AttributeError: 'tuple' object has no attribute 'split' result = example.split(',')

我们通过用逗号分隔多个值来声明元组而不是字符串。

元组与列表非常相似,但实现的内置方法较少并且是不可变的(无法更改)。

为了能够使用该split()方法,我们必须声明一个字符串或访问特定索引处的元组。

主程序
example = 'bobby,hadz' print(type(example)) # 👉️ <class 'string'> # ⛔️ AttributeError: 'tuple' object has no attribute 'split' result = example.split(',') print(result) # 👉️ ['bobby', 'hadz']

我们声明了一个字符串,因此我们能够使用该split()方法在每个逗号处拆分字符串。

在调用 split() 之前访问特定的元组元素

如果您打算调用split()元组的元素,请在特定索引处访问它。

主程序
my_tuple = ('a,b', 'c,d') result = my_tuple[1].split(',') print(result) # 👉️ ['c', 'd']

我们访问了索引处的元组元素1,它是一个字符串,因此我们能够调用该split()方法。

Python 索引是从零开始的,因此元组中的第一项的索引为,最后一项的索引为or 0-1 len(my_tuple) - 1

元组是如何构造的

元组有多种构造方式:

  • 使用一对括号()创建一个空元组
  • 使用尾随逗号 –a,(a,)
  • 用逗号分隔项目 –a, b(a, b)
  • 使用tuple()构造函数

请注意,元组是不可变的,因此如果您必须改变序列,则必须使用 alist代替。

您可能会在元组对象上使用的方法只有 2 种。

主程序
my_tuple = ('a', 'b', 'c', 'c') print(my_tuple.count('c')) # 👉️ 2 print(my_tuple.index('a')) # 👉️ 0

count方法返回值在元组中出现的次数,该index方法返回值在元组中的索引。

您可以使用该功能查看对象具有的所有属性dir()

主程序
my_tuple = ('bobby', 'hadz', 'com') # 👇️ [... 'count', 'index' ...] print(dir(my_tuple))

如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。

如果您尝试访问不在此列表中的任何属性,您将收到“AttributeError:元组对象没有属性”错误。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: