Ответ 1
Для меня, используя try-except, в той же области действия, что и if-else, не имеет никакой удобочитаемости. Значение исключений состоит в том, что их можно поймать на более высоком уровне в дереве вызовов.
Переходя только на один уровень, мы избегаем инструкции break
:
import glob, os
try:
for file in glob.glob("\\*.txt"):
with open(file) as fp:
# do something with file
except IOError:
print("could not read", file)
Но истинный гений исключений - это когда код просто исчезает:
# Operate on several files
# SUCCESS: Returns None
# FAIL: Raises exception
def do_some_files():
for file in glob.glob("\\*.txt"):
with open(file) as fp:
# do something with file
Теперь ответственность за вызывающую программу отображает полезное сообщение об ошибке при сбое. Мы исключили ответственность за полное устранение отказа от этого кода и в другую сферу.
На самом деле, вы можете полностью переносить ответственность из нашей программы и в переводчика. В этом случае интерпретатор напечатает некоторое полезное сообщение об ошибке и прекратит нашу программу. Если сообщение по умолчанию для Python достаточно для ваших пользователей, я рекомендую вообще не проверять наличие ошибок. Таким образом, ваш оригинальный script будет выглядеть следующим образом:
import glob, os
for file in glob.glob("\\*.txt"):
# Do something