尽管有边缘情况,但除以零异常引发

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 让我相信它们是。)