为什么这是类型错误而不是语法错误

时间:2014-01-02 15:53:57

标签: python syntax typeerror

为什么代码

print("Average =" (sum/count))

产生类型错误而不是语法错误,看到逗号丢失了吗?

感谢。

3 个答案:

答案 0 :(得分:6)

Python将()视为函数调用;字符串不可调用,导致TypeError

>>> "somestring"(42)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

在Python中,所有都是一个对象;函数也是对象,任何对象都可以实现__call__方法,使每个对象都可以调用。 Python不会知道字符串对象在运行时之前是不可调用的,因此这不是语法错误。

答案 1 :(得分:1)

解释器将该行视为函数调用,函数必须为"Average =",但这是不可能的,因为str不可调用。因此,您会收到类型错误异常。

>>> print("Average =" (sum/count))
 #        ^^^^^^^^^^^  ^^^^^^^^^
 #         fct name        arg1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

可调用对象是其类实现__call__函数的对象。它在某些情况下很有用(请参阅下面的链接),但str类型没有实现它(因为它没有任何意义)。
有关可调用对象的更多信息:Python __call__ special method practical example

答案 2 :(得分:0)

这是函数调用的有效语法(如果"Average ="被方法名替换了怎么办?),你就不能调用字符串。