ошибка при установленных исключениях
объясните почему при вводимых данных 20 0 10 , данный код выводит ошибку если установлены исключения ?
# ввод
r30, r10, r20 = (int(num) for num in input().split())
# все возможные числа для перемножения
numbers = []
r30_1 = r30
while r30_1 >= 0:
numbers.append(r30_1)
r30_1 -= 1
numbers.reverse()
numbers = numbers[:numbers.index(r30) + 1]
res_list1 = [r10 * x for x in numbers if isinstance(x, int)]
res_list2 = [r20 * y for y in numbers if isinstance(y, int)]
# оставить только числа до конечных
try:
res_list1 = res_list1[:res_list1.index(r30) + 1]
res_list2 = res_list2[:res_list2.index(r30) + 1]
for a in res_list1:
for b in res_list2:
if (a + b) == r30:
print(a // r10, b // r20)
except ZeroDivisionError:
for a in res_list1:
for b in res_list2:
if (a + b) == r30:
if a == 0:
print(a, b // r20)
if b == 0:
print(a // r10, b)
except ValueError:
for a in res_list1:
for b in res_list2:
if (a + b) == r30:
print(a // r10, b // r20)
Ответы (1 шт):
У вас сначала случается exception ValueError, во время обработки которого уже в этом блоке происходит деление на ноль при вычислении выражения a // r10:
except ValueError:
for a in res_list1:
for b in res_list2:
if (a + b) == r30:
print(a // r10, b // r20)
^^^^^^^^
При обработке exception не рекомендуется выполнять какой-то сложный код, который что-то вычисляет, рекомендуется просто напечатать какую-то информацию.
Но если очень хотите, можете туда тоже встроить блок обработки исключений и тогда ошибки не будет:
except ValueError:
try:
for a in res_list1:
for b in res_list2:
if (a + b) == r30:
print(a // r10, b // r20)
except:
print('We need to go deeper')
Вложенность блоков обработки исключений может быть любой, но обычно так всё же не делают, исключение - это исключительная ситуация, после которой обычно выполнение кода всё же прекращают.