我如何解决这个“TypeError:'str'对象不可调用”错误?

时间:2013-06-01 14:30:07

标签: python string user-interface comparison callable

我正在创建一个基本程序,它将使用GUI来获取商品的价格,如果初始价格低于10,则从价格中扣除10%,或者如果价格低20%,则需要20%的折扣价。初始价格大于10:

import easygui
price=easygui.enterbox("What is the price of the item?")
if float(price) < 10:
    easygui.msgbox("Your new price is: $"(float(price) * 0.1))
elif float(price) > 10:
    easygui.msgbox("Your new price is: $"(float(price) * 0.2))

我不断收到此错误:

easygui.msgbox("Your new price is: $"(float(price) * 0.1))
TypeError: 'str' object is not callable`

为什么我收到此错误?

2 个答案:

答案 0 :(得分:22)

您正在尝试将字符串用作函数:

"Your new price is: $"(float(price) * 0.1)

因为字符串文字和(..)括号之间没有任何内容,所以Python将其解释为将字符串视为可调用的指令并使用一个参数调用它:

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

似乎你忘了连接(并调用str()):

easygui.msgbox("Your new price is: $" + str(float(price) * 0.1))

下一行也需要修复:

easygui.msgbox("Your new price is: $" + str(float(price) * 0.2))

或者,使用str.format()的字符串格式:

easygui.msgbox("Your new price is: ${:.2f}".format(float(price) * 0.1))
easygui.msgbox("Your new price is: ${:.2f}".format(float(price) * 0.2))

其中{:02.2f}将替换为您的价格计算,将浮点值格式化为2位小数值。

答案 1 :(得分:0)

这部分:

"Your new price is: $"(float(price)

请求python调用此字符串:

"Your new price is: $"

就像一个函数一样: function( some_args) 总是会触发错误:

TypeError: 'str' object is not callable