You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python货币转换器报错:'str' object is not callable 问题排查求助

解决你的货币转换器报错问题

首先,先给你明确:str object is not callable这个错误的根源是你把字符串当成函数来调用了,而且还有几个拼写和变量类型的小问题,我帮你一步步理清楚:


1. 核心错误:错误的字符串格式化写法

你代码里每个分支的这行是问题关键:

str('拢.2f' '拢'(convert1))

为什么错?

  • '拢.2f' '拢'会被Python自动拼接成一个字符串'拢.2f拢',然后你加了(convert1),就相当于试图把这个字符串当作函数去执行(比如像print(123)那样),但字符串本身不是可调用的函数,所以就抛出了str object is not callable的错误。
  • 另外你应该是想输入英镑符号£,结果打成了中文的拢,这也是一个小失误。

正确的写法

Python里格式化数字保留两位小数并加上货币符号,最简洁的方式是用f-string,比如:

f"£{convert1:.2f}"

解释:

  • f""表示这是一个格式化字符串
  • {convert1:.2f}表示把变量convert1格式化为保留两位小数的浮点数
  • 前面加上£就是你要的货币符号

2. 变量类型的潜在问题

你定义的currency = DoubleVar(),但DoubleVar是Tkinter里用来存储数字的变量类型,而你要设置的convert2是包含文字和符号的字符串,这会导致后续设置值的时候出错,应该把currency改成StringVar()。


3. 拼写错误(可能导致分支不触发)

你的代码里有几处拼写错误,会导致选择对应货币时找不到分支:

  • Kemyan Shilling → 应该是Kenyan Shilling
  • Phillappines → 应该是Philippines
  • Philipine Peso → 应该是Philippine Peso

修正后的完整代码

DateofOrder = StringVar()
value0 = StringVar()
convert = DoubleVar()
# 把DoubleVar改成StringVar,因为要存带文字的结果
currency = StringVar()

def ConCurrency():
    if value0.get() == "USA":
        convert1 = convert.get() * 1.52  # 不需要额外转float,因为convert.get()已经是数字
        convert2 = f"USA Dollars £{convert1:.2f}"
        currency.set(convert2)
    elif value0.get() == "Kenya":
        convert1 = convert.get() * 156.21
        convert2 = f"Kenyan Shilling £{convert1:.2f}"
        currency.set(convert2)
    elif value0.get() == "Brazil":
        convert1 = convert.get() * 5.86
        convert2 = f"Brazilian Real £{convert1:.2f}"
        currency.set(convert2)
    elif value0.get() == "Canada":
        convert1 = convert.get() * 2.03
        convert2 = f"Canadian Dollar £{convert1:.2f}"
        currency.set(convert2)
    elif value0.get() == "India":
        convert1 = convert.get() * 101.71
        convert2 = f"Indian Rupee £{convert1:.2f}"
        currency.set(convert2)
    elif value0.get() == "Philippines":  # 修正拼写
        convert1 = convert.get() * 71.74
        convert2 = f"Philippine Peso £{convert1:.2f}"  # 修正拼写
        currency.set(convert2)

额外小提示

  • convert.get()返回的已经是浮点数了,不需要再用float()包裹,直接计算就行
  • 如果你的转换基准是从英镑转成其他货币,那当前的汇率是对的;如果是反过来(比如从美元转英镑),你需要调整汇率的计算方式,这个根据你的需求来

内容的提问来源于stack exchange,提问作者svgeeer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:06:24