Ошибка при использовании 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]