为什么代码
print("Average =" (sum/count))
产生类型错误而不是语法错误,看到逗号丢失了吗?
感谢。
答案 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 ="
被方法名替换了怎么办?),你就不能调用字符串。