Это очень старый вопрос, но поскольку единственный ответ - ИМО - не применим к Python, сюда приходит мое взятие.
Исключения в Python - это то, о чем многие программисты, знакомые с языком, сталкиваются с трудностями. По сравнению с другими языками Python значительно отличается от того, как используются исключения: на самом деле Python обычно использует исключения для управления потоком.
Канонический пример является for
цикл: вы, конечно, согласитесь, что нет ничего «однозначно странно» о петля исчерпав свои итерации (на самом деле это то, что все петли делать, если не работает) ... еще, а не проверять заблаговременно, если все еще есть значения для обработки, Python продолжает пытаться считывать значения из итерируемого, и, в противном случае, поднимает StopIterator
exception, который, в свою очередь, улавливается выражением for
и делает код, выходящий из цикла.
Кроме того, это идиоматическое в Python идти по ЭСПЦ (это проще попросить прощения, чем разрешения = try-except
), а не LBYL (раз отмерь = if not A, B or C then
).
В этом отношении ответ csj верен для C или Java, но не имеет отношения к Python (чьи исключения редко являются «исключительными» в природе).
Другой фактор, чтобы рассмотреть - хотя - это сценарий, в котором пользователь данные некорректны, но вы не в состоянии действовать на результатах функции проверки:
- с
return statement
, не сумев обработать значение False
приведет с вашими недействительными данными, отправленными по трубопроводу,
- , в противном случае, если бы вы были
raise
Исключение, неспособное поймать его, приведет к тому, что исключение распространяется через ваш стек, в результате чего ваш код будет остановлен.
Хотя второй вариант может показаться пугающим сначала, это по-прежнему правильный путь: если данные недействительны, нет смысла передавать его дальше по линии ... это, скорее всего, приведет к сложным -to-track ошибок в потоке, и вы также упустили возможность исправить ошибку в вашем коде (не работая с недействительными данными).
Снова. Использование исключений является вещий способ сделать (но это не относится к большинству других языков), а также изложены в this other answer и в zen of python:
Ошибки никогда не должны проходить молча.
Если явно не отключено.
HTH!
'raise NeitherValidNorInvalidException ('D:')' –
То, о чем я сейчас думаю. Вот почему я прошу больше мнений, может быть, кто-то может увидеть то, о чем я не знаю. Благодарю. –
Ну, чтобы немного расшириться. Предположим, что у меня есть метод, который использует значение, например ErasePersonalIdentity (ssn), тогда было бы разумным, чтобы ssn был действительным. Если был предоставлен недействительный ssn, то было бы целесообразно привлечь исключение InvalidSSNException. Дело в том, что если операция требует действительного ввода, тогда исключение должно запускаться, когда предоставляется недопустимый ввод. Если операция проверяет ввод, то исключений нет. – csj