目录
AttributeError: ‘tuple’ object has no attribute in Python
- AttributeError:“元组”对象没有属性 X
- AttributeError: ‘tuple’ 对象没有属性 ‘append’
- AttributeError: ‘tuple’ 对象没有属性 ‘split’
AttributeError: ‘tuple’ 对象在 Python 中没有属性 X
当我们访问元组中不存在的属性时,会出现 Python“AttributeError: ‘tuple’ object has no attribute”。
要解决该错误,请使用列表而不是元组来访问列表方法或更正分配。
下面是错误如何发生的示例。
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"
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
方法返回值在元组中的索引。
list
因为元组是不可变的。您可以使用该功能查看对象具有的所有属性dir()
。
my_tuple = ('a', 'b', 'c', 'c') # 👇️ [... 'count', 'index' ...] print(dir(my_tuple))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
如果您尝试访问不在此列表中的任何属性,您将收到错误。
解决特定方法的错误
以下是解决特定方法错误的 2 个示例。单击链接导航到副标题。
AttributeError: ‘tuple’ 对象没有属性 ‘append’
append()
当我们尝试在元组而不是列表上调用方法时,会出现 Python“AttributeError: ‘tuple’ object has no attribute ‘append’” 。
要解决该错误,请使用列表而不是元组,因为元组是不可变的。
下面是错误如何发生的示例。
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()
。
确保你没有错误地声明一个元组
下面是错误如何发生的示例。
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()
方法。
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:元组对象没有属性”错误。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: