如何让Python函数优先处理字符串?解决str与int比较报错
解决字符串与整数比较的报错问题
你遇到的报错核心原因是:total_damage可能是字符串类型(比如数字以字符串形式存储,或是除了"Damages not recorded"之外的其他字符串值),直接和damage_scale里的整数做大小比较,就会触发类型不兼容的错误。
下面是修改后的函数,优先处理字符串场景,彻底解决这个问题:
def damage_rate(hurricanes): damage_scale = {0: 0, 1: 100000000, 2: 1000000000, 3: 10000000000, 4: 50000000000} hurricanes_by_damage = {0:[], 1:[], 2:[], 3:[], 4:[], 5:[]} for cane in hurricanes: total_damage = hurricanes[cane]['Damage'] # 优先处理特殊字符串,直接归为0组并跳过后续判断 if total_damage == "Damages not recorded": hurricanes_by_damage[0].append(hurricanes[cane]) continue # 尝试将字符串转为整数,处理数字形式的字符串 try: damage_value = int(total_damage) except ValueError: # 转换失败的非数字字符串,也归为0组 hurricanes_by_damage[0].append(hurricanes[cane]) continue # 用转换后的整数做区间判断 if damage_value == damage_scale[0]: hurricanes_by_damage[0].append(hurricanes[cane]) elif damage_scale[0] < damage_value <= damage_scale[1]: hurricanes_by_damage[1].append(hurricanes[cane]) elif damage_scale[1] < damage_value <= damage_scale[2]: hurricanes_by_damage[2].append(hurricanes[cane]) elif damage_scale[2] < damage_value <= damage_scale[3]: hurricanes_by_damage[3].append(hurricanes[cane]) elif damage_scale[3] < damage_value <= damage_scale[4]: hurricanes_by_damage[4].append(hurricanes[cane]) else: hurricanes_by_damage[5].append(hurricanes[cane]) return hurricanes_by_damage
关键修改说明:
- 用
continue在处理完特殊字符串后直接进入下一次循环,确保字符串场景被优先处理 - 新增
try-except块,把数字形式的字符串转为整数,同时捕获转换失败的异常(比如其他无效字符串) - 所有大小比较都基于转换后的整数,彻底避免字符串与整数的类型冲突
内容的提问来源于stack exchange,提问作者Jeomla
相关产品推荐
相关产品推荐

