Разделение на ноль Исключение возникло, несмотря на пограничный случай

Я пытаюсь вручную обработать исключение деления на ноль в 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: деление на ноль ВМЕСТО :error:


person J. Doe    schedule 14.03.2017    source источник


Ответы (1)


>>> "0" == 0
False

Ваш оператор if проверяет равенство с 0, но вы не конвертируете в int, пока не выполните вычисление, поэтому ваш тест != всегда будет проходить, поскольку он сравнивает строку с целым числом.

(Это предполагает, что ваши входные данные стека являются строками; если это не так, вам, вероятно, не нужны вызовы int(), но тот факт, что вы добавляете результат деления в стек в виде строки, заставляет меня поверить, что они есть.)

person Amber    schedule 14.03.2017
comment
Большое спасибо! Хотя изначально я пытался провести сравнение с 0, это не сработало. Однако ваш ответ привел меня к типу стека[len(stack)-1] в int, который отлично работал - person J. Doe; 15.03.2017
comment
Возможно, это было "0\n", и, таким образом, "0\n" не будет равно "0". - person Amber; 15.03.2017