Исключения — это базовый инструментарий почти любого классического языка программирования, позволяющий элегантно обрабатывать ошибочные сценарии. Однако вся мощь механизма исключений большинством разработчиков не используется или интерпретируется неверно.
Рубрика «исключения»
Правильное использование механизма исключений
2026-06-15 в 15:39, admin, рубрики: java, исключения, обработка исключенийПочему я предпочитаю исключения, а не значения ошибок
2024-09-16 в 13:01, admin, рубрики: exception, ruvds_переводы, исключения, коды ошибок, отладка, ошибки в программе, сообщения об ошибках
Качественная обработка ошибок — это ключ к созданию надёжных программ; но программистов она часто пугает, ведь всегда найдётся ещё один пограничный случай.
В традиционных объектно-ориентированных языках программирования используются специальные классы исключений, которые можно выбрасывать, чтобы прекратить обычный поток управления и немедленно сообщить об ошибке.
Давайте рассмотрим пример, в котором применено защищённое от ошибок целочисленное деление:
int safeDiv(int a, int b) {
if (b == 0)
throw Div0(); // Исключения передаются особым образом
return a / b; // Теперь-то всё абсолютно безопасно, ведь так?
}
Новые языки программирования склонны применять сообщения об ошибках в функциональном стиле и кодировать ошибки в возвращаемый тип. Например, Go кодирует ошибку в возвращаемый тип при помощи кортежа (res, err), а Rust возвращает Result<T, E> — тип-сумму результата и ошибки.
Читать полностью »
Альтернативы исключениям С++ и зачем они нужны
2022-03-08 в 19:07, admin, рубрики: c++, skillfactory, Блог компании SkillFactory, Железо, исключения, исследование, исследование программ, Компьютерное железо, многопоточность, Программирование, производительность, тестирование, Тестирование IT-систем
Современные тенденции в области аппаратного обеспечения ведут к тому, что использование исключений на C++ всё труднее и труднее оправдать. В представленной работе эта проблема иллюстрируется наглядно, даётся её количественная оценка и обсуждаются потенциальные будущие направления исправления исключений. Материалом делимся к старту Читать полностью »
Устройство CPython. Доклад Яндекса
2020-07-22 в 7:00, admin, рубрики: cpython, python, Блог компании Яндекс, генераторы, интерпретатор, исключения, память, Программирование, Промышленное программирование, словари, типизация, типы, управление памятьюМы публикуем конспект вступительной лекции видеокурса «Бэкенд-разработка на Python». В ней Егор Овчаренко egorovcharenko, тимлид в Яндекс.Такси, рассказал о внутреннем устройстве интерпретатора CPython.
— Если кратко, какой у нас будет план? Сначала мы поговорим о том, почему будем изучать именно Python. Затем посмотрим, как работает интерпретатор CPython более глубоко, как он управляет памятью, как устроена система типов в Python, на словари, генераторы и исключения. Я думаю, это займет примерно час.
Читать полностью »
saneex.c: try-catch-finally на базе setjmp-longjmp (C99) быстрее стандартных исключений C++¹
2020-03-31 в 10:45, admin, рубрики: C, c++, C99, exceptions, gcc, longjmp, open source, setjmp, UNIX, Visual Studio, volatile, windows, исключения, нанотехнологии, ПрограммированиеПока писал эту сугубо техническую статью, Хабр успел превратиться в местное отделение ВОЗ и теперь мне даже стыдно ее публиковать… но в душе теплится надежда, что айтишники еще не разбежались и она найдет своего читателя. Или нет?
Меня всегда восхищала стандартная библиотека Си, да и сам Си — при всей своей минималистичности от них так и веет духом тех самых первых красноглазиков хакеров. В черновике первого официального стандарта (ANSI C, он же C89, он же ANS X3.159-1989, он же, позднее, C90 и IEC 9899:1990) определяется 145 функций и макросов, из них около 25 — это вариации (ввиду отсутствия в языке перегрузок), а 26 чисто математических. K&R во второй редакции² приводят 114 функций (плюс математические), считая остальные за экзотику. В черновике³ C11 функций уже 348, но больше сотни — математика, а еще штук 90 это «перегрузки». А теперь посмотрим на Boost, где одних только библиотек — 160. Чур меня…
И среди этой сотни-полутора функций всегда были: обработка сигналов, вариативные функции (которые до интерпретируемого PHP дошли 25 лет спустя, а в Delphi, бурно развивавшемся одно время, их нет до сих пор) и порядка 50 строковых функций вроде printf() (м-м-м… JavaScript), strftime() (…) и scanf() (дешевая альтернатива регуляркам).
А еще всегда были setjmp()/longjmp(), которые позволяют реализовать привычный по другим языкам механизм исключений, не выходя за рамки переносимого Си. Вот о них и поговорим — Quake World, стеки, регистры, ассемблеры и прочая матчасть, а вишенкой будет занятная статистика (спойлер: Visual Studio непостоянна, как мартовский заяц, а throw saneex.c в два раза быстрее всех).
Ошибки операторов ПДн, связанные с кадровой работой
2017-11-28 в 11:56, admin, рубрики: Блог компании Cloud4Y, Законодательство и IT-бизнес, информационная безопасность, исключения, кадровый учет, Карьера в IT-индустрии, нарушения, персональные данные, управление персоналомПрошло более 10-ти лет с момента принятия Федерального закона от 27.07.2006 N 152-ФЗ «О персональных данных», однако надзорная деятельность Роскомнадзора показывает, что далеко не все еще освоились с практикой его применения. В частности, в статистике за 2016-й год явно просматривается одна из типичных ошибок операторов, в большинстве случаев, связанная с кадровой работой (видимо, как наиболее распространенная деятельность), а именно:
«Несоответствие содержания письменного согласия субъекта персональных данных на обработку персональных данных требованиям законодательства Российской Федерации (ч. 4 ст. 9 Федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных») – примерно 9% от общего количества выявленных в 2016 году нарушений.»
Давайте попробуем еще раз взглянуть на данную проблематику. Тем более, благодаря нововведениям в законодательстве, штрафы значительно выросли. Читать полностью »
Пишем Guard
2017-06-13 в 8:34, admin, рубрики: .net, check, contracts, copy paster, exceptions, github, guard, java, nuget, open source, opensource, validation, исключения, кодогенерация, проверки, разработка
Привет!
Есть несколько способов проверять аргументы на правильность. Например, для проверки на null можно использовать:
- if (!ReferenceEquals(arg, null)) throw…
- Code Contracts: Contract.Requires(!ReferenceEquals(arg, null))
- Guard.IsNotNull(arg, nameof(arg))
В статье я рассмотрю только третий вариант (все примеры кода — для C#, однако некоторые из них будут полезны и в Java).
Иерархия исключений в современном PHP-приложении
2017-05-22 в 5:52, admin, рубрики: 42, exceptions, php, исключения, обработка ошибок, ооп, Проектирование и рефакторинг, Совершенный кодЗадача публикации: доступно изложить способ организации иерархии исключений и их обработки в приложении. Без привязки к фреймворкам и конкретной архитектуре. Описываемый способ является де-факто стандартом в сообществе: он используется во многих серьёзных библиотеках и фреймворках. В том числе Zend, Symfony. Не смотря на его логичность и универсальность, формального описания предлагаемого подхода на русском языке я не нашёл. После неоднократного устного изложения концепции коллегам, родилась мысль оформить её в виде публикации на Хабрахабр.
В языке PHP, начиная с 5-ой версии, доступен механизм исключений. В актуальной, 7-ой, версии этот механизм был улучшен и переработан с целью единнобразной обработки разных ошибок при помощи конструкции try{} catch...
В стандартной библиотеке (SPL) PHP предоставляет готовый набор базовых классов и интерфейсов для исключений. В 7-ой версии этот набор был расширен интерфейсом Throwable. Вот диаграмма всех имеющихся в версии 7 типов (изображение — ссылка):
Исключения в Windows x64. Как это работает. Часть 4
2017-04-19 в 12:32, admin, рубрики: C, c++, exceptions, github, open source, try/except, UEFI, windows, Блог компании Аладдин Р.Д., исключения, системное программированиеОпираясь на материал, описанный в первой, второй и третьей частях данной статьи, мы продолжим обсуждение темы обработки исключений в Windows x64.
Описываемый материал требует знания базовых понятий, таких, как пролог, эпилог, кадр функции и понимания базовых процессов, таких, как действия пролога и эпилога, передача параметров функции и возврат результата функции. Если читатель не знаком с вышеперечисленным, то перед прочтением рекомендуется ознакомиться с материалом из первой части данной статьи. Если читатель не знаком со структурами PE образа, которые задействуются в процессе обработки исключения, тогда перед прочтением рекомендуется ознакомиться с материалом из второй части данной статьи. Также, если читатель не знаком с процессом поиска и вызова обработчиков исключений, рекомендуется ознакомиться с третьей частью данной статьи.
Читать полностью »
Исключения в Windows x64. Как это работает. Часть 3
2017-03-20 в 11:31, admin, рубрики: C, c++, exceptions, github, open source, try/except, UEFI, windows, Блог компании Аладдин Р.Д., исключения, системное программированиеОпираясь на материал, описанный в первой и второй частях данной статьи, мы продолжим обсуждение темы обработки исключений в Windows x64.
Описываемый материал требует знания базовых понятий, таких, как пролог, эпилог, кадр функции и понимания базовых процессов, таких, как действия пролога и эпилога, передача параметров функции и возврат результата функции. Если читатель не знаком с вышеперечисленным, то перед прочтением рекомендуется ознакомиться с материалом из первой части данной статьи. Также, если читатель не знаком со структурами PE образа, которые задействуются в процессе обработки исключения, тогда перед прочтением также рекомендуется ознакомиться с материалом из второй части данной статьи.
Читать полностью »



