如何在Python中从JSON提取值并修复脚本无输出问题
解决Python汇率转换脚本无输出问题
嘿,我来帮你排查一下脚本没输出的问题!先拆解你的代码逻辑,其实核心问题不是转不转float,而是币种代码的比较逻辑出错了,咱们一步步理清楚:
问题出在哪?
看你这段关键代码:
aud = (data["AUD"]) coin=str(input('choose coin: ')).lower() if coin==aud: print(aud*amount)
aud存储的是汇率数值(比如1.5974),但用户输入的coin是字符串(比如输入"aud"转成小写后是"aud"),字符串和数值永远不可能相等,所以if条件永远不成立,自然不会执行print语句。- 另外你只单独处理了AUD的情况,其他币种(比如BRL、USD)都没覆盖到,而且输入的币种是小写,和JSON里的大写键也不匹配。
修正后的脚本
我调整了代码逻辑,解决这些问题,还加了异常处理避免脚本崩溃:
import json # 读取JSON格式的汇率文件 with open('2018-03-22.txt', 'r') as f: data = json.load(f) # 获取用户输入,统一转成大写匹配JSON中的键 coin = input('choose coin: ').strip().upper() # 处理金额输入,允许输入小数,同时捕获非法输入 try: amount = float(input('insert amount: ')) except ValueError: print("请输入有效的数字金额!") exit() # 检查输入的币种是否存在于汇率数据中 if coin in data: # 取出汇率并显式转为float(json.load会自动转数字,但显式转换更稳妥) exchange_rate = float(data[coin]) total = exchange_rate * amount print(f"{amount} 单位 {coin} 对应的计算结果是: {total}") else: print(f"抱歉,没有找到 {coin} 的汇率数据!")
关键修改点解释
- 币种代码匹配:把输入的
coin转成大写,直接和JSON里的键(比如"AUD")匹配,不需要单独定义每个币种变量,代码更简洁通用。 - 输入合法性检查:用
try-except处理金额输入不是数字的情况,避免脚本直接崩溃。 - 覆盖所有币种:通过
if coin in data判断,只要JSON里有的币种都能处理,不用逐个写if条件。 - 显式转float:虽然
json.load会自动把JSON里的数字转成int或float,但显式转成float可以统一类型,避免比如IDR这类整数型汇率带来的潜在问题——这也是你疑惑的点,确实显式转换更稳妥,但它不是导致无输出的直接原因。
内容的提问来源于stack exchange,提问作者Filipe Santos
相关产品推荐
相关产品推荐

