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 ShillingPhillappines→ 应该是PhilippinesPhilipine 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
相关产品推荐
相关产品推荐

