@UNy

Как обрабатывать исключение в цикле?

Я хочу разделить элементы 1 списка на элементы 2 списка , но во 2 списке есть 0. Как обработать исключение чтобы после него цикл продолжал работу?
try:
    number = [1,2,3,4,5]
    number1 = [1,2,3,4,0]

    for i in number:
        for j in number1:
            a = i/j
            print(a)


except ZeroDivisionError:
    print('error')
  • Вопрос задан
  • 203 просмотра
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Очевидно, перенести обработчик исключения в тело цикла:
number = [1,2,3,4,5]
number1 = [1,2,3,4,0]

for i in number:
    for j in number1:
        try:
            a = i/j
        except ZeroDivisionError:
            print('error')
        else:
            print(a)
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
Как вариант, можно вообще забить на исключение и получить честный inf при делении на ноль:
import numpy as np
a1 = np.array([1,2,3,4,5], dtype=np.float64)
a2 = np.array([1,2,3,4,0], dtype=np.float64)
print (a1 / a2)

Будет "RuntimeWarning: divide by zero encountered in true_divide" в консоли, но программа отработает.

Результат выполнения:
[ 1. 1. 1. 1. inf]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@maxfox
print([a / b for a, b in zip(number,number1) if b != 0])
Ответ написан
Комментировать
vvpoloskin
@vvpoloskin
Инженер связи
try:
   for i, j in zip(number, number1):
      print(i/j)
except:
      print(error)
      continue

На самом деле try/catch - всего лишь более красивая конструкция goto. Кстати говоря, еще не понятно, лучше ли это goto на самом деле.
Ответ написан
Комментировать
@Eugen_p
написать try непосредственно перед тем местом где ожидается ошибка..
Ну или можно проверять не содержит ли делитель 0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы