如何针对特定值捕获ValueError?温度范围校验异常排查
问题分析与解决
原代码核心问题
- 你只在
try块中处理了类型转换失败的ValueError,但没有主动抛出「温度超出范围」的异常。当温度>50或<3时,代码只会跳过计算逻辑,不会触发except块,所以无任何输出。 - 现有异常提示信息只覆盖了温度大于50的情况,没考虑温度小于3的场景。
修正方案
- 完成类型转换后,主动检查温度范围,不符合则抛出
ValueError - 调整异常提示,覆盖两种不符合范围的情况
- 保留风速≥3的判断(风寒公式的适用条件通常要求风速不低于3)
修正后的代码
def windChill(temperature, windSpeed): try: temperature = float(temperature) windSpeed = float(windSpeed) # 主动检查温度范围,不符合则抛出异常 if temperature > 50 or temperature < 3: raise ValueError("温度不能大于50或小于3") # 风速符合条件时计算风寒指数 if windSpeed >= 3: equation = 35.74 + 0.6215*temperature - 35.75*(windSpeed)**0.16 + 0.4275*temperature*(windSpeed)**0.16 print(round(equation, 1)) else: print("风速需大于等于3才能计算风寒指数") except ValueError as e: print(e) windChill(400,1)
效果说明
- 调用
windChill(400,1)会触发异常,输出温度不能大于50或小于3 - 传入非数字参数(如
windChill("abc",1))时,会捕获类型转换异常并输出对应提示 - 温度正常但风速<3时,会提示风速不符合要求
内容的提问来源于stack exchange,提问作者Andrew Hemsworth
相关产品推荐
相关产品推荐

