尽管有边缘情况,但除以零异常引发
Divide by Zero Exception raised despite edge case
我试图在 python3.5 中手动处理被零除的异常,但是,它一直忽略我的用户定义的情况并给出默认异常。我怎样才能避免这种情况?感谢任何帮助。
注意:我将列表用作堆栈,因此是最后一个并且正在检查顶部元素是否为 0。此外,顺序是正确的 - 我故意将顶部元素作为分母
elif 'div' in command:
if len(stack)!=0 and len(stack)!=1 and is_digit(stack[len(stack)-2]) and is_digit(stack[len(stack)-1]) and stack[len(stack)-1]!=0:
op2 = stack.pop();
op1 = stack.pop();
stack.append(str( int(int(op1) / int(op2)) ) + '\n');
else:
stack.append(':error:\n');
这给
ZeroDivisionError:除以零代替:错误:
>>> "0" == 0
False
您的 if
语句测试与 0
是否相等,但您在进行计算之前不会转换为 int,因此您的 !=
测试始终在进行在将字符串与整数进行比较时通过。
(这是假设您的堆栈输入是字符串;如果不是,那么您可能不需要 int()
调用 - 但事实上您正在将除法的结果添加到stack as a string 让我相信它们是。)
我试图在 python3.5 中手动处理被零除的异常,但是,它一直忽略我的用户定义的情况并给出默认异常。我怎样才能避免这种情况?感谢任何帮助。
注意:我将列表用作堆栈,因此是最后一个并且正在检查顶部元素是否为 0。此外,顺序是正确的 - 我故意将顶部元素作为分母
elif 'div' in command:
if len(stack)!=0 and len(stack)!=1 and is_digit(stack[len(stack)-2]) and is_digit(stack[len(stack)-1]) and stack[len(stack)-1]!=0:
op2 = stack.pop();
op1 = stack.pop();
stack.append(str( int(int(op1) / int(op2)) ) + '\n');
else:
stack.append(':error:\n');
这给 ZeroDivisionError:除以零代替:错误:
>>> "0" == 0
False
您的 if
语句测试与 0
是否相等,但您在进行计算之前不会转换为 int,因此您的 !=
测试始终在进行在将字符串与整数进行比较时通过。
(这是假设您的堆栈输入是字符串;如果不是,那么您可能不需要 int()
调用 - 但事实上您正在将除法的结果添加到stack as a string 让我相信它们是。)