Python使用含小数的range报错,如何处理CVSS分数输入需求?
问题分析与解决
原代码存在两个核心问题:
- 用
int(input("Enter an CVSS Score: "))转换输入:如果输入小数(比如1.2),会直接触发ValueError,因为int()无法解析带小数点的字符串。 - 使用
range(0.1, 3.9)判断范围:range()仅支持整数参数,不能用来判断小数是否在某个区间内。
针对你的需求(仅允许输入1-10的数值,支持小数,匹配CVSS风险等级),修正后的代码如下:
while True: try: score = float(input("Enter a CVSS Score: ")) # 验证输入范围在1-10之间 if not (1.0 <= score <= 10.0): print("请输入1到10之间的数值") continue # 匹配CVSS风险等级 if score < 0.1: print("Risk Score = None") elif 0.1 <= score <= 3.9: print("Risk Score = Low") elif 4.0 <= score <= 6.9: print("Risk Score = Medium") elif 7.0 <= score <= 8.9: print("Risk Score = High") elif 9.0 <= score <= 10.0: print("Risk Score = Critical") break except ValueError: print("请输入有效的数值(支持小数,比如1.2、3.4)")
代码说明
- 用
float()替代int()转换输入,支持小数解析。 - 用循环+异常处理拦截非数字输入,确保用户输入有效。
- 直接用区间比较判断分数等级,替代无效的
range()调用。 - 增加1-10的输入范围校验,不符合要求时提示用户重新输入。
- 补充完整的CVSS风险等级划分,符合行业标准。
内容的提问来源于stack exchange,提问作者user21658588
相关产品推荐
相关产品推荐

