Зачем использовать предложение "else" Python в try/except block?
Возможный дубликат:
Python try-else
Я не вижу в этом преимущества, по крайней мере, на примере, который я только что прочитал в Dive Into Python:
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
else:
getpass = AskPassword
(http://www.diveintopython.net/file_handling/index.html)
Почему бы вам не добиться того же эффекта с более коротким/простым:
try:
from EasyDialogs import AskPassword
getpass = AskPassword
except ImportError:
getpass = default_getpass
Что мне не хватает?
Ответы
Ответ 1
В примере нет преимущества, кроме, возможно, стиля. Как правило, хорошая идея сохранить код, который может вызвать исключения рядом с кодом, который с ними связан. Например, сравните их:
try:
from EasyDialogs import AskPassword
# 20 other lines
getpass = AskPassword
except ImportError:
getpass = default_getpass
и
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
else:
# 20 other lines
getpass = AskPassword
Вторая хорошая, когда except
не может вернуться раньше или повторно выбросить исключение. Если возможно, я бы написал:
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
return False // or throw Exception('something more descriptive')
# 20 other lines
getpass = AskPassword
Ответ 2
Я лично нахожу это более ясным в некоторых ситуациях. Естественно, большая часть кода должна выполняться, когда возникает исключение не. Таким образом, вы говорите:
try:
this_very_dangerous_call()
except ValueError:
# if it breaks
handle_value_error()
else:
continue_with_my_code()
# more code
Таким образом, вы визуально отделяете код обработки исключений от остальной части кода. Это как сказать: "Попробуйте это, если он сломается, что-то предпримет, если он не [вставляет длинное объяснение здесь]"