Ошибка при использовании continue в блоке try

continue выделено как "This code is unreachable"

def k():
        for i in range(2):
            try:
                invent = 1
                return invent
            except Exception:
                return 0
            else:
                continue

Ответы (1 шт):

Автор решения: Namerek
def k():
    for i in range(2):
        try:
            # Полагаю что значение 1 условно и вместо нее
            # должна использоваться конструкция генерирующая значения
            # Ну к примеру `i / (i % 2)` что может поднять ZeroDivisionError
            invent = 1

            # Поскольку здесь Вы используете return
            # то событие else для try не произойдет никогда
            return invent

        # Такое использование Exception в try в проектах сложнее
        # чем "4*8" влечет в перспективе кучу гимороев.
        # Используйте более конкретные определения
        except Exception:
            return 0
        else:
            # То событие которое никогда не наступит
            continue


def ka():
    for i in range(5):
        try:
            yield i / (i % 2)
        except ZeroDivisionError:
            yield 0
        else:
            # Что впринципе тоже является избыточным
            # поскольку дальше ничего нет и в любом случае цикл продолжится
            continue
# Едиственным нюансом является то, что такая фунция является генератором
# И для того, чтобы получить из нее, к примеру список ее нужно к нему привести
# К примеру

a = list(ka())

print(a)

# Или можно по другому использовать эту функцию
for item in ka():
    print(item)


# [0, 1.0, 0, 3.0, 0]

# 0
# 1.0
# 0
# 3.0
# 0

Возможен еще один вариант реализации где использование else в конструкции try целесообразно:

def kl():
    elements = []
    for i in range(5):
        try:
            elem = i / (i % 2)
        except ZeroDivisionError:
            elements.append(
                0
            )
        else:
            elements.append(
                elem
            )
    return elements

# Хотя и без него тоже прекрасно работает
def kl():
    elements = []
    for i in range(5):
        try:
            elem = i / (i % 2) 
            # Если здесь будет ZeroDivisionError
            # то интерпретатор перейдет к обработке исключения
            # и процедура добавления будет пропущена
            elements.append(                        # |
                elem                                # |
            )                                       # |
        except ZeroDivisionError: # <-----------------
            # Вместо этого добавится 0
            elements.append(
                0
            )
    return elements

print(kl())
# [0, 1.0, 0, 3.0, 0]
→ Ссылка