|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
||
Исключения которые можно обработать - кто они и где?26.12.2015, 00:50. Показов 1988. Ответов 2
Метки best practices (Все метки)
в эфире интернетов витает правило хорошего тона
кроме банальщины вроде transaction.Rollback(), logger.Error(e) или какого-нибудь ObjectDisposed в методе Stop Что еще?? то есть проще говоря, 95% исключений должны вылезать на высший уровень до падения приложения, т.к никто никогда их не обрабатывает всё равно суть то в чем, если допустим мы используем библиотеку %libname%, вызываем некий метод и ожидаем исключений... но погодите, ведь если автор библиотеки следовал правилу то "ожидаемых" исключений быть не может! а во вторых никто кроме майкрософта не описывает ожидаемые исключения... то есть всё, что ожидается и может быть обработано УЖЕ перехвачено и обработано а то что не ожидается - а как же его обработать если оно не ожидается? качаем допустим webclient страницу, оп ошибка, какая? http error code штук 50, делать switch по всем...пупок развяжется же (там еще забавные такие бывает типа еррор, а по факту редирект) а если делать 2-3 варианта, то надежность такого метода всё равно на нуле в итоге логика: метод должен скачать страницу, не смог - throw метод ждал страницу чтоб обработать, ему бросили exception, что делать? throw! метод ожидал пока страница качается и обработается, ему дали exception...throw! throw...throw! throw! appdomain.unhandledexception состояние приложения неопределенно, close.... а смысл тогда вообще что-либо перехватывать? зачем вообще вся эта система try-catch? допустим вызываем некий SaveToDB, а там на сервере перегруз, памяти нет или диск бэдами покрылся, хлоп прилетела ошибка. и что дальше? вот у нас Exception..хз что в нем, хз откуда он, хз когда это пройдет нужен ли rollback, не будет ли в нем тоже исключений? а они бывают!!! ну да можно сделать механизм "повторного сохранения" в базу...но это уже довольно мудреные конструкции которые могут затронуть всё нутро приложения и нужны очень мало где или допустим пишем в файл, а тут хлоп оказывается места нет, слабо вспомнить какой exception выпадет? вот и я не помню, а может и сроду не знал никогда, но как же его "обрабатывать" тогда?
0
|
||
| 26.12.2015, 00:50 | |
|
Ответы с готовыми решениями:
2
Подсчитать сумму элементов массива где они возрастают и сумму элементов где они убывают.Вычислить разность сумм Как правильнее обработать исключения?
|
|
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
||||||||||||
| 27.12.2015, 03:35 | ||||||||||||
Сообщение было отмечено m0nax как решение
Решение
Вы немного не поняли!
Вы у себя можете сделать так:
Ну а по правилам нужно сделать так:
1
|
||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||
| 28.12.2015, 15:35 | ||||||
|
Например, есть у вас метод ReadWebPage с возвращаемым типом XmlDocument. Это значит, что если я использую ваш метод, то ожидаю, что результатом его работы будет ссылка на XmlDocument. Я ставлю дальнейшую логику своего кода в зависимость от этой переменной. Если по какой-либо причине считать страницу и создать необходимый мне объект не удалось, то это означает, что ваш метод неспособен в данной ситуации выполнить свою часть контракта (предоставить ссылку на объект), а следовательно и я дальше не могу продолжать запланированные действия. То есть возникает типичная исключительная ситуация. А вот если у вас метод называется, скажем, TryReadWebPage, который возвращает bool (как TryParse, ага), то контракт между мной и вами такой: вы пытаетесь скачать страницу и предоставить ссылку на XmlDocument. Результатом метода будет значение успеха операции. Значит, используя ваш метод, я буду строить логику своего приложения соответствующим образом, а вы внутри метода можете ловить что вашей душе угодно и возвращать false. Контроллер работает по протоколу VDCP (бинарный протокол через нуль-модем), а у видео сервера API через сокеты и XML-команды, обернутые в .NET-классы, предоставленные производителем. Напрямую они общаться не могут, значит мне нужно написать посредника, который получает команды от контроллера и передает их серверу. Контроллер засылает команду PLAY CUE (подготовить клип к проигрыванию), при этом в ответ ожидает только код "принято", но каждые 40 мс (время 1 кадра при 25 fps) запрашивает статус, в который и входят всякие флаги об ошибках или об успешности операции. Вот я получаю от него команду PLAY CUE с ID клипа, строю соответствующий XML-запрос и отсылаю его видео серверу. На сервере клип не найден, в этом случае метод API выбрасывает исключение, которое я перехватываю и устанавливаю в статусе бит ID NOT FOUND, который при следующем запросе и скармливаю контроллеру. Или если соединение с сервером разорвалось и не может быть восстановлено, то я перехватываю эти исключения и устанавливаю в статусе флаг PORT DOWN. К примеру, если у вас приложение с интерфейсом, то перехватчики стоят в обработчиках всяких кнопок и показывают сообщение об ошибке. Разумеется, если ошибка перехеривает всё состояние программы, то самый лучший метод — это именно завершение работы. Ну, это если вы не хотите, чтобы написанный вами браузер падал при 404. Его и ловите ![]() А вообще такие вещи должны выявляться на стадии тестирования.
1
|
||||||
| 28.12.2015, 15:35 | |
|
Помогаю со студенческими работами здесь
3
Обработать все исключения в одном месте Кто знает где можно скачать калькулятор по Windows XP? Где в Фейсбуке можно посмотреть кто заходил на страницу? Кто знает где можно найти хелпу по win32/с++ ? Кто-то знает где можно найти симулятор андроида на ПК? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|