TypeError: ‘tuple’ 对象在 Python 中不可调用
TypeError: ‘tuple’ object is not callable in Python
Python“TypeError: ‘tuple’ object is not callable”发生在我们尝试像调用函数一样调用元组时。
要解决该错误,请确保在访问特定索引处的元组时使用方括号,例如my_tuple[0]
.
这是错误如何发生的一个示例。
my_tuple = ('a', 'b', 'c') # ⛔️ TypeError: 'tuple' object is not callable my_tuple(0) # 👈️ uses parentheses instead of square brackets
问题是我们在访问特定索引处的元组时使用圆括号而不是方括号。
使用方括号访问索引处的元组
访问元组的元素时使用方括号。
my_tuple = ('a', 'b', 'c', 'd') print(my_tuple[0]) # 👉️ 'a' print(my_tuple[1]) # 👉️ 'b' print(my_tuple[2]) # 👉️ 'c'
Python 索引是从零开始的,因此元组中的第一项的索引为0
,最后一项的索引为-1
or len(my_tuple) - 1
。
如果需要获取元组的一部分,也应该使用方括号。
my_tuple = ('a', 'b', 'c', 'd') print(my_tuple[0:2]) # 👉️ ('a', 'b') print(my_tuple[2:4]) # 👉️ ('c', 'd')
元组切片的语法
是my_tuple[start:stop:step]
.
索引start
是包含的,stop
索引是排他的(最多,但不包括)。
如果start
省略索引,则认为是0
,如果stop
省略索引,则切片转到元组的末尾。
常见错误原因
出现错误的原因有多种:
- 尝试使用圆括号
()
而不是方
括号访问元组[]
。 - 具有同名的函数和变量。
- 错误地覆盖内置函数并将其设置为元组。
- 具有同名的类方法和类属性。
- 调用一个返回元组两次的函数。
确保你没有覆盖tuple()
函数
另一件需要注意的事情是您没有覆盖内置的
tuple()函数。
# 👇️ overriding built-in tuple() function tuple = ('a', 'b', 'c') # ⛔️ TypeError: 'tuple' object is not callable result = tuple(['d', 'e', 'f'])
要解决这种情况下的错误,请重命名变量并重新启动脚本。
# ✅ no longer overriding built-in tuple() function my_tuple = ('a', 'b', 'c') result = tuple(['d', 'e', 'f'])
忘记在列表中的两个元组之间放置逗号
确保没有两个元组相邻且没有用逗号分隔。
# ⛔️ TypeError: 'tuple' object is not callable my_list = [('a', 'b') ('c', 'd')]
列表中的两个元组之间缺少一个逗号,因此 Python 认为我们正在尝试调用第一个元组。
要解决该错误,请在元组之间放置一个逗号。
my_list = [('a', 'b'), ('c', 'd')]
尝试将元组作为函数调用会导致错误
错误的另一个常见原因是简单地尝试将元组作为函数调用。
my_tuple = ('a', 'b', 'c') # ⛔️ TypeError: 'tuple' object is not callable my_tuple()
要解决该错误,您要么必须删除括号,要么弄清楚如何为变量分配元组而不是函数或类。
my_tuple = ('a', 'b', 'c') print(my_tuple) # 👉️ ('a', 'b', 'c')
一旦我们删除了括号,我们就能够毫无问题地打印元组。
如果错误地为变量分配了元组,则必须更正分配。
函数和变量同名
确保您没有同名的函数和变量。
def example(): return 'bobbyhadz.com' example = ('a', 'b', 'c') # ⛔️ TypeError: 'tuple' object is not callable print(example())
example
隐藏同名函数,所以当我们尝试调用函数时,我们实际上最终调用了变量。重命名变量或函数可以解决错误。
def example(): return 'bobbyhadz.com' my_tuple = ('a', 'b', 'c') print(example()) # 👉️ bobbyhadz.com
现在元组和函数的名称不同,不再冲突,问题已解决。
# 具有同名的类方法和类属性
当我们有一个类方法和一个同名的类属性时,也会导致错误。
class Employee(): def __init__(self, tasks): # 👇️ this attribute hides the method self.tasks = tasks # 👇️ same name as class variable def tasks(self): return self.tasks emp = Employee(('dev', 'test')) # ⛔️ TypeError: 'tuple' object is not callable print(emp.tasks())
该类Employee
具有同名的方法和属性。
要解决该错误,您必须重命名类方法。
class Employee(): def __init__(self, tasks): self.tasks = tasks def get_tasks(self): return self.tasks emp = Employee(('dev', 'test')) print(emp.get_tasks()) # 👉️ ('dev', 'test')
属性和方法现在有了不同的名称,因此问题已解决。
# 调用一个返回元组两次的函数
当您调用两次返回元组的函数时,也会发生该错误。
def my_func(): return ('bobby', 'hadz', 'com') # ⛔️ TypeError: 'tuple' object is not callable print(my_func()())
第一组括号调用函数,函数返回一个元组。
The second set of parentheses tries to call the tuple as a function and causes
the error.
Remove the second set of parentheses to resolve the issue.
def my_func(): return ('bobby', 'hadz', 'com') print(my_func()) # 👉️ ('bobby', 'hadz', 'com')
# How tuples are constructed in Python
In case you declared a tuple by mistake, tuples are constructed in multiple
ways:
- Using a pair of parentheses
()
creates an empty tuple - Using a trailing comma –
a,
or(a,)
- Separating items with commas –
a, b
or(a, b)
- Using the
tuple()
constructor
# Conclusion
To solve the “TypeError: ‘tuple’ object is not callable” error, make sure:
- You aren’t trying to access a tuple with parentheses
()
instead of square
brackets[]
. - You don’t have a function and a variable with the same name.
- You aren’t overriding a built-in function and setting it to a tuple.
- You don’t have a class method and a property with the same name.
- You aren’t calling a function that returns a tuple twice.
# Additional Resources
You can learn more about the related topics by checking out the following
tutorials:
- Convert a List of Tuples to a Dictionary in Python
- How to convert a Tuple to an Integer in Python
- How to convert a Tuple to JSON in Python
- Find Min and Max values in Tuple or List of Tuples in Python
- Get the Nth element of a Tuple or List of Tuples in Python
- Creating a Tuple or a Set from user Input in Python
- How to Iterate through a List of Tuples in Python
- How to convert a Tuple to a String in Python
- Write a List of Tuples to a File in Python
- AttributeError: ‘tuple’ object has no attribute X in Python