Это очень старый вопрос, но так как единственный ответ - IMO - не применим к Python, вот мое мнение.
Исключения в Python - это то, что многие программисты плохо знакомы с языкоместь трудности с общением.По сравнению с другими языками Python значительно отличается в том, как используются исключения: на самом деле Python обычно использует исключения для управления потоком .
Каноническим примером является цикл for
: вы наверняка согласитесьчто в цикле, исчерпающем свои итерации, нет ничего «уникально странного» (на самом деле это то, что делают все циклы, если они не прерваны) ... но вместо того, чтобы заранее проверять, есть ли еще значения для обработки, Python сохраняетпри попытке чтения значений из итерируемого и при неудаче это вызывает StopIterator
исключение , которое, в свою очередь, перехватывается выражением for
и создает код, выходящий из цикла.
Кроме того, в Python идиоматично использовать EAFP (просить прощения проще, чем разрешение = try-except
), а не LBYL (смотри, прежде чем прыгнуть = if not A, B or C then
).
В этом отношении ответ csj является правильным для C или Java, но не имеет значения для Python (чьи исключения редко бывают "исключительными" в nature ).
Еще один фактор, который следует учитывать - хотя - это сценарий, в котором пользовательские данные являются недействительными, но вы не можете воздействовать на результат функции проверки:
- с помощью
return statement
, если не обработать значение False
, это приведет к тому, что ваши недействительные данные будут отправлены по конвейеру, - , наоборот, если вы
raise
получите исключение, из-за невозможности его перехвата получитсяв исключении, распространяющемся по вашему стеку, что в конечном итоге приводит к остановке вашего кода.
Хотя второй вариант может показаться пугающим на первый взгляд, он все же является правильным путем: если данные неверны, существуетнет смысла передавать его дальше по линии ... скорее всего, это приведет к появлению трудных для отслеживания ошибок позже в потоке, и вы также упустите шанс исправить ошибку в вашем коде (если вы не будете действовать надействительные данные).
Снова. Использование исключений - это pythonic способ сделать (но это не относится к большинству других языков), как также указано в этом другом ответе и в zen of python :
Ошибки никогда не должны проходить молча.
Если явно не отключено.
HTH!