Когда вы используете каждый? Я считаю, что я использую, если намного больше, чем исключения. Похоже, что я уловил исключения, используя мои «ifs», прежде чем я их получу. Во всем моем коде есть ifs.Когда вы должны проверять наличие ошибок, используя «if», и когда вы должны использовать исключения?
Когда вы должны проверять наличие ошибок, используя «if», и когда вы должны использовать исключения?
ответ
Try catch statements предназначен для обработки серьезных ошибок и, в частности, для подключения к внешним службам, таким как веб-служба, база данных, веб-запрос и т. Д., Где ошибки будут и должны произойти время от времени. Для обработки исключения более тяжело использовать среду выполнения, чем писать хороший код и использовать функции данного языка, такие как ifs или trernary.
попробовать уловы - это не первая линия обороны, это последняя строка, использующая защитные методы кодирования.
Особенно, поскольку вы работаете с большими приложениями, обработка исключений действительно является лучшей практикой. Как вы упомянули, вы получаете много утверждений if. С помощью python использование операторов try/except позволяет создать более стандартизованный способ устранения исключений. За исключением случаев, вы получите возможность увидеть тип класса исключений, а также любые другие пользовательские, которые вы создаете. Это просто дает вам гораздо более структурированный способ кодирования.
EAFP: Easier to ask for forgiveness than permission.
Это общий стиль кодирования Python предположить существование действительных ключей и атрибутов и исключений улова, если предположение оказывается ложным.
Это контрастирует с LBYL (Look before you leap) стиле, общие для многих других языков, таких как C.
Update 1
Конечно, вы должны убедиться, что вы обрабатывать любые пойманные исключения, а не просто молча игнорировать их в противном случае вы собираетесь тратить много времени на отладку! pass
, вероятно, не то, что вы ищете!
Update 2
Вы должны поймать конкретные исключения, что вы ожидали быть raise
-d, являются ли они built-in exceptions или иначе.
Я поставил общую попытку: кроме Exceptione,: print e pass Является ли это oK? – TIMEX
@TIMEX: здесь нет общего ответа. Как вы обрабатываете исключение, зависит от того, какую обработку вы делали, когда это было 'raise' -d. То, что 'pass' очень редко, вы хотите! – Johnsyweb
Стоит отметить, что использование обработчиков исключений по отношению к операторам 'if' сообщает читателю вашего кода что-то о том, что вы ожидаете. Утверждение 'if' подразумевает, что существует значительная вероятность того, что условие будет либо« True », либо« False », а' try'/'except' подразумевает обработку крайних случаев. Таким образом, хотя EAFP может быть идиоматическим питоном, в данном случае есть место для интерпретации. Кроме того, вы почти никогда не должны использовать общий «кроме исключения». – Wilduck
Я не повторять то, что многие люди уже говорили, но есть большое преимущество использования исключений, которые я хотел бы упомянуть:
Если какая-то процедура не работает, вы можете легко решить на каком уровне косвенность, вы должны обработать это исключение - и вам не нужно раздувать более глубокие уровни с проверкой ошибок после, скажем, каждого шага.
Конечно, это не освобождает вас от ответственности за хороший код очистки, который оставит все ясно для каждого возможного пути исполнения: таким образом, освободите любые ресурсы, сокеты, транзакции или откат транзакций и т. Д.И есть много способов сделать это:
try... finally
блоков, что позволяет любое исключение распространяться, но уборка все перед (на многих языках, в том числе Python),with
заявление (специфичные для Python),- парадигма RAII, которая включает очистку в деструкторах (в основном C++).
- 1. Когда вы должны использовать ParseForm и когда вы должны использовать FormValue и PostFormValue?
- 2. F # Когда вы должны использовать кортеж и когда вы должны использовать struct?
- 3. Когда вы должны использовать «git pull origin» и когда вы должны использовать «git pull origin master»?
- 4. В SQL Server, когда вы должны использовать GO и когда вы должны использовать полуточку;?
- 5. Когда вы должны использовать IEnumerable и GetEnumerator?
- 6. Когда вы должны использовать Page.DataBind() и Control.DataBind()?
- 7. Когда вы должны использовать `@ + id` вместо` @ id`?
- 8. Темы Windows: когда вы должны использовать InterlockedExchangeAdd()?
- 9. Когда вы должны использовать swap или reset
- 10. Когда вы должны использовать (...) {...} в C#?
- 11. Когда вы должны использовать общедоступные статические методы
- 12. Когда вы должны использовать полнотекстовое индексирование?
- 13. Когда вы должны использовать «с (nolock)»
- 14. Когда вы должны начать использовать Memcached?
- 15. Когда вы должны использовать $ limit в монго?
- 16. Когда вы должны использовать InnoDB в MySQL?
- 17. Когда вы не должны использовать виртуальные деструкторы?
- 18. Когда вы должны использовать SparseArray setValueAt()?
- 19. Когда и почему вы должны использовать WNOHANG с waitpid()?
- 20. Когда вы должны использовать одноэлементный шаблон и статические методы?
- 21. Когда вы должны сделать класс неприступным?
- 22. Когда вы должны принудительно выполнять автоматические обновления?
- 23. , когда вы должны избегать использования MPI_COMM_WORLD?
- 24. Когда вы должны извлечь UserControl в WPF
- 25. Когда вы не должны использовать ObservableCollection и Databinding?
- 26. Когда и почему вы должны использовать метод synchronize() NSUserDefaults?
- 27. Когда вы должны использовать прямую инициализацию и при инициализации копии?
- 28. Когда вы должны отключить буферизацию JSP?
- 29. Когда вы должны прекратить модульное тестирование
- 30. Когда вы должны продлить Thread на Java?
Это предложение было задано бесчисленное количество раз (2739582, 1152541, 1313812). Между этим вопросом, ваш вопрос 4557577 (и, несомненно, многие другие), и ваши в настоящее время более * восемьсот вопросов *, кажется, что вы что-то вопроса спамера. –