TypeError: 对象在 Python 中不可调用
TypeError: object is not callable in Python
当我们尝试使用括号将不可调用的对象(例如列表或字典)作为函数调用时,会出现 Python“TypeError: object is not callable” ()
。要解决该错误,请确保在访问索引处的列表或字典的键时使用方括号,例如my_list[0]
.
下面是错误如何发生的示例。
my_list = ['a', 'b', 'c'] # ⛔️ TypeError: 'list' object is not callable print(my_list(0)) # 👈️ uses parentheses instead of square brackets
代码示例中的问题是我们在访问特定索引处的列表时使用圆括号而不是方括号。
my_list = ['a', 'b', 'c'] print(my_list[0]) # 👉️ "a" my_dict = {'name': 'Alice'} print(my_dict['name']) # 👉️ "Alice"
当我们尝试将不可调用的对象作为函数调用(使用括号)时会发生错误。
您可能有一组额外的括号,您必须删除这些括号才能解决错误。
my_bool = False # ⛔️ TypeError: 'bool' object is not callable print(my_bool())
删除不可调用对象后的括号将解决问题。
class Employee(): def __init__(self, name): # 👇️ this attribute hides the method self.name = name def name(self): return self.name emp = Employee('Alice') # ⛔️ TypeError: 'str' object is not callable print(emp.name())
该类Employee
具有同名的方法和属性。
属性隐藏了方法,所以当我们尝试在类的实例上调用方法时,我们得到对象不可调用的错误。
要解决该错误,您必须确保重命名类中的方法。
class Employee(): def __init__(self, name): self.name = name def get_name(self): return self.name emp = Employee('Alice') print(emp.get_name()) # 👉️ "Alice"
重命名该方法后,您将能够毫无问题地调用它。
str = 'hello world' # ⛔️ TypeError: 'str' object is not callable print(str(10))
我们覆盖内置str
函数,将其设置为字符串原语,并尝试将其作为函数调用。
要解决这种情况下的错误,请确保重命名变量并重新启动脚本。
# ✅ Not overriding built-in str() anymore my_str = 'hello world' print(str(10))
确保您没有同名的函数和变量。
def example(): return 'hello world' example = 'hi' # ⛔️ TypeError: 'str' object is not callable print(example())
example
变量隐藏同名函数,所以当我们尝试调用函数时,我们实际上最终调用了变量。
重命名变量或函数可以解决错误。
如果在导入模块并尝试调用它时遇到错误,则必须更正导入语句或访问作为函数的模块上的属性。
假设我们有 2 个文件 –another.py
和main.py
.
def do_math(a, b): return a + b
这是 的内容main.py
。
import another # # TypeError: 'module' object is not callable another(10, 15)
问题是,在main.py
文件中,我们导入了another
模块,但使用括号尝试调用该do_math
函数。
import another print(type(another.do_math)) # 👉️ <class 'function'> print(another.do_math(10, 15)) # 👉️ 25
another.py
在尝试调用它之前,我们使用点符号来访问该函数。
type()
函数在调用它之前检查特定属性是否指向函数或类。或者,您可以直接从another.py
模块导入函数。
from another import do_math print(do_math(10, 15)) # 👉️ 25
此导入语句仅从模块导入my_dict
变量another.py
。
如果需要导入多个变量或函数,在import语句中用逗号分隔,egfrom another import first, second, third
结论
当我们尝试使用括号将不可调用的对象(例如列表或字典)作为函数调用时,会出现 Python“TypeError: object is not callable” ()
。要解决该错误,请确保在访问索引处的列表或字典的键时使用方括号,例如my_list[0]
.