Python如何校验列表元素长度不足时抛ValueError,修复现有代码报错
代码修正方案
调整后的可运行代码如下:
def validate(bpp): # 校验列表长度是否满足要求 if len(bpp) < 3: raise ValueError("Please have 3 values in the list.") # 校验操作符合法性 valid_operators = {"add", "div", "sub", "mul"} op = bpp[0] if op not in valid_operators: raise ValueError("Please use 'add','div','sub' or 'mul' along with two numbers.") # 校验操作数类型 if not isinstance(bpp[1], int): raise ValueError("Please put an integer for your first operand.") if not isinstance(bpp[2], int): raise ValueError("Please put an integer for your second operand.") # 执行对应运算并返回结果 num1, num2 = bpp[1], bpp[2] if op == "add": return num1 + num2 elif op == "sub": return num1 - num2 elif op == "mul": return num1 * num2 elif op == "div": if num2 == 0: raise ValueError("Cannot divide by zero.") # 如需返回整数除法结果可替换为 return num1 // num2 return num1 / num2
主要修改点说明:
- 删除了错误的
for循环逻辑:获取列表元素个数需要用len(bpp),直接判断长度小于3就抛出异常即可,你之前报错的原因是把列表对象直接传入了要求整数参数的range()方法。 - 修正了操作符校验逻辑:原代码的4个并列
if判断逻辑存在错误,比如传入add时,第一个if判断通过后,第二个if会判定add != div直接抛出异常,改为判断操作符不在合法集合内再抛错即可。 - 修正了类型校验逻辑:
type(int)本身是类型对象,判断变量是否为整数应该使用isinstance(待校验变量, int)。 - 新增运算返回逻辑:根据操作符对应执行加减乘除计算,直接返回结果,调用
validate(["add", 10, 10])就会返回预期的20。
内容的提问来源于stack exchange,提问作者Brady L.
相关产品推荐
相关产品推荐

