汇率字典键匹配子串返回值失败,AssertionError报错排查
问题排查与修复
常见错误根源
- 遍历汇率字典时,未完成全量遍历就提前返回
None,跳过了后续可能匹配的键 - 匹配逻辑不符合业务需求(比如错误判断键是否以目标货币结尾,而非包含/开头)
- 方法内部循环逻辑错误,导致匹配到目标键时未正确返回对应汇率
修正后的代码实现
exchange_rates = {'USDSEK': 10, 'EURSEK': 10} class MultiCurrencyAccount: def conversion_rate(self, currency): # 遍历所有汇率键值对,逐一检查匹配 for rate_code, rate_value in exchange_rates.items(): # 检查当前汇率代码是否包含目标货币(若需精准前缀匹配,可改用rate_code.startswith(currency)) if currency in rate_code: return rate_value # 未找到对应汇率时的处理,可按需返回默认值或抛出异常 return None # 或替换为 raise ValueError(f"无对应货币{currency}的汇率") # 验证代码 account = MultiCurrencyAccount() assert account.conversion_rate('USD') == 10, "USD汇率匹配失败" assert account.conversion_rate('EUR') == 10, "EUR汇率匹配失败"
核心优化点
- 确保遍历所有汇率项,不会中途提前返回
None遗漏匹配项 - 匹配逻辑可灵活调整:如果业务要求目标货币必须是汇率代码的前缀(比如USD必须在USDSEK开头),将
currency in rate_code替换为rate_code.startswith(currency),能避免误匹配(比如避免把SEKUSD中的USD识别为目标货币) - 未找到汇率时的处理更清晰,可根据实际业务选择返回默认值或抛出异常
内容的提问来源于stack exchange,提问作者Grecia Garrido
相关产品推荐
相关产品推荐

