【问题标题】:Why is this a type error and not a syntax error为什么这是类型错误而不是语法错误
【发布时间】:2014-01-20 02:49:20
【问题描述】:

为什么会有代码

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

产生类型错误而不是语法错误,视为缺少逗号?

谢谢。

【问题讨论】:

    标签: python syntax typeerror


    【解决方案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】:

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

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

      在 Python 中,everything 是一个对象;函数也是对象,任何对象都可以实现__call__ 方法,使每个对象都可能被调用。 Python 直到运行时才知道字符串对象是不可调用的,所以这不是语法错误。

      【讨论】:

      • 感谢您的回答。只是为了把它放在上下文中,print(sum (sum/count)) 也会导致类型错误,即使涉及的所有变量都是整数,那么这与不可调用的字符串有什么关系?
      • @user2975192:整数也不能调用。 sum 是一个整数。
      • @user2975192:如果您希望 sum 成为内置函数,那么您不能这样使用它,因为您通过在代码中为 sum 分配不同的值来掩盖它。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-22
        • 1970-01-01
        • 2015-02-11
        • 2014-07-22
        • 2014-04-15
        • 2016-11-02
        • 1970-01-01
        • 2023-02-23
        相关资源
        最近更新 更多