Вопрос к тестировщикам
Безусловно, а вот если исключение генерится, но никакой ошибки нет.
Что значит нет никакой ошибки? Ты же понимаешь, что надо определить, что ты называешь ошибкой? :)
Вот например, при итерации кидается исключение, если коллекция каким-либо образом изменена. Это ошибка?
Или например кинуть исключение, если не удалось соедениться с удаленным хостом. Это ошибка?
Ну т.е. вызодить из цикла и/или рекурсии по исключению
-----
Никогда не считал подобное нормальным.
Хотя пару раз - пользовался и даже объяснял молодой девахе что с точки зрения управления так можно, но есть куча вопросов.
Я обернул твой говно код в оболочку и...
-----
...нарушил начальное утверждение - выход из рекурсии посредством ехцептиона.
На вопрос "можно ли управлять работой программы исключениями" ответ да.
-----
Посредством генерации ошибок? Да, разумеется можно...
Блин... вот почти как сейчас - в бэкграунде прожка тянет данные по запросу с сервака...
уже 38 минут... еще даже первую секцию не вытянула... а секций - с десяток...
Как хочется ее ехцептировать... и это будет исключительно правильное решение...
К сожалению деньги платят за другое...
Сгенерировать исключение в случае, если нет доступа к БД или к файлу - это вполне себе "нормально работающая программа".
------
Для тебя - да.
Для меня - нормальным будет логирование события - "потеряна связь с сервером" и переход на чуточку другой протокол работы с тем же сервером. Ну нельзя мне мне останавливаться из-за мелких сбоев в сети. Тем более что сбои в сети - явление обычное.
Сейчас вместо возврата значения ошибки кидают исключение и да это "нормально работающая программа".
-----
Это - ужас - после выброса исключения никто не гарантирует определенного состояние системы - место выброса жестко не определено.
Особенно, если не смотреть что там окружении шебуршится...
При "коде возврата" хоть что-то гарантировалось.
так может рецептом поделишься?
-----
Берется юниорный прогер вульгариус одна штука.
Сажается на проект. Медленно, чтобы не заметил проблем и не соскочил.
Потом начинается готовка. Многие практикуют начинание с запарки.
Вот когда он уже достаточно запарен, можно начинать повышать накал
- сделать юниора скажем миддлом и добавить жару.
Потом, когда устаканится и перекипятится миддле - можно еще поднять
градус - сделать сениором и если на проекте сидит плотно - варить на
полном огне до готовности проекта.
Когда проект дойдет до готовности... сениор прогер все еще не будет
готов - можно подсадить на два и более проекта... но - осторожно - чтобы
не сорвался с криком "что Я вам лошадь ломовая что ли?"...
Дальше количество проектов доводится до уровня когда прогер уже не
понимает что происходит, но устойчиво сидит на множестве проектов
и варится, варится, варится...
Признаком дохождения до крутого состояния является готовность взять
еще несколько проектов... тут главное не дать сорваться в свободное
плавание или собственный бизнес...
Для меня - нормальным будет логирование события - "потеряна связь с сервером" и переход на чуточку другой протокол работы с тем же сервером. Ну нельзя мне мне останавливаться из-за мелких сбоев в сети. Тем более что сбои в сети - явление обычное.
Да ты просто не знаешь чем отличается генерация ошибки от обработки ошибки :)
Это - ужас - после выброса исключения никто не гарантирует определенного состояние системы - место выброса жестко не определено.
Тебя просто нельзя допускать к современным проектам. Вот кодить на ANSI C где-нибудь в 70х годах - это твое :)
При "коде возврата" хоть что-то гарантировалось.
Ничерта там не гарантировалось. Говно-код можно писать используя любой язык программирования и любой способ возврата ошибки. Будь то исключение или "код возврата"
Ну нет ошибки - просто пакет ушел на другой хост. Ответ от него, кстати, на уровне TCP/IP можно получить, но там на оговоренном порту нет нужного сервиса...
И опять пошла морока про коварный зарубеж (с) Высоцкий
Надоело переливать из пустого в порожнее.
что надо определить, что ты называешь ошибкой?
Хм оказывается точного определения и нет.
https://studopedia.ru/15_119158_opredelenie-ponyatiya-oshi...
Можно сказать так, что если программа работает как ожидается, то ошибок нет.
Если цикл должен крутиться 5 раз и он все 5 раз крутится, то ошибок нет. Если же он на 5-й раз выходит по эксептион, то это непорядок.
Вот как раз свежий примерчик, до пятницы при старте программы мне нужно было нажать один раз ф5 и всё было нормально.
Теперь приходится делать раз 10 потому как вываливаются исключения которые в принципе не влияют на работу программы, но являются неприятными для меня.
твоем говно-коде иначе нельзя было
------
Однако мой говнокод для тебя есть говнокод внешний, из окружения, которое, по твоему изначальному утверждению, знать не требуется.
Но даже это не меняет сути - выход по эхцетиону из рекурсии илии вложеных циклов - это большой геморой, как и вся эхцептионская срань...
Можно сказать так, что если программа работает как ожидается, то ошибок нет.
Если цикл должен крутиться 5 раз и он все 5 раз крутится, то ошибок нет. Если же он на 5-й раз выходит по эксептион, то это непорядок.
Ну ОК, а если цикл крутится 4 раза, после этого вылетает исключение. Исключение это обрабатывается и цикл запускается еще раз. И так до тех пор, пока он (цикл) не прокрутится 5 раз. В этом случае ошибка есть или еще таки нет?
Вот как раз свежий примерчик, до пятницы при старте программы мне нужно было нажать один раз ф5 и всё было нормально.
Теперь приходится делать раз 10 потому как вываливаются исключения которые в принципе не влияют на работу программы, но являются неприятными для меня.
И что? Это неисправленные ошибки или нет?
Однако мой говнокод для тебя есть говнокод внешний, из окружения, которое, по твоему изначальному утверждению, знать не требуется.
Я также говорил, что исходить надо из того, что окружение работает без ошибок. Если ошибки там все таки есть, значит их надо нивелировать (если это возможно). В данном случае мы имеем дело с банальным багом.
Но даже это не меняет сути - выход по эхцетиону из рекурсии илии вложеных циклов - это большой геморой, как и вся эхцептионская срань...
Вот только эта хрень делает код читабельным, сопровождаемым и тестируемым, а также упрощает отладку (если конечно не попадаются мудаки, которые "проглатывают" исключения)
------
Сегодняшний выхлоп:
Exception thrown: 'Oracle.DataAccess.Client.OracleException' in Oracle.DataAccess.dll
Exception thrown: 'System.Net.Sockets.SocketException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
Exception thrown: 'System.Net.WebException' in System.dll
Exception thrown: 'System.Net.Mail.SmtpException' in System.dll
Это вся информация.
Эээ... добавлю - данные - получены. 45К строк...
Ну и что будем нивелировать? Чтобы повторить результат надо часов 6... может - 8+...
В случае с ZigBee - там нет ошибок. Там есть элементарное непонимание того с чем надо работать.
Это вся информация.
Эээ... добавлю - данные - получены. 45К строк...
Ну и что будем нивелировать? Чтобы повторить результат надо часов 6... может - 8+...
Ты так нихрена и не понял.
В случае с ZigBee - там нет ошибок.
Ну и отлично. Значит все работает как надо :)
Там есть элементарное непонимание того с чем надо работать.
Ну так топай своей проторенной дорожкой - разбирайся.
Хи-хи... Это Я про твое решение по рекурсии...
В моем промере исключение обрабатывается, а не проглатывается.
если вылетает, потому что допустим соединение прервалось,то это ошибка и правильно
А если сам выбрасываешь исключение чтобы цикл по новому запустить, то это уже непорядок.
Почему не порядок? Вот предположим, ты отправляешь сообщение и ответом на это сообщение является 5 сообщений от удаленного сервиса. Ты принял 4 сообщения, а вместо 5-ого сообщения ты принял нечто, чего ты не ожидал. Т.е. соединение не рвалось и о возникшей ошибке знаешь только ты. Выход - сгенерировать исключение. Почему же это непорядок?