11.07.2012 19:24, "Артём Н." пишет:
On 11.07.2012 01:08, Igor Chumak wrote:-КутьЭто если ты делаешь ошибку, которую тест уже ловит. А если ты делаешь ошибку, которую тест еще не ловит (а она будет, и не одна), то результат будет тот же самый, как если бы теста не было вообще. Внятная и подробная диагностика поэтому обязательна.Я и делаю. Как-раз хотел спросить (очередной провокационный вопрос). Как организовывать обработку ошибок?>:-) Т.е., вызывается функция. Она должна вернуть код завершения. В функции м.б. вложенные функции. В функции может выполниться только часть вызовов вложенных функций. К примеру, бэкап БД не прошёл, но бэкап состояния пакетов, который делается следующим, должен быть сделан. Какой код возвращать?Обычно возвращают статистику "время выполнения, сколько задач в задании провалилось, сколько файлов скопировано, сколько байт прочитано, сколько записано...". Если какая-то часть логики вынесена в функцию,значит результат ее должен что-то означать?Я не про показ статистики, а именно про возврат кода.
Результат работы функции не обязательно short int ;)Если очень хочется именно _кода_ - можно вернуть % успешно выполненных задач.
Можно писать ошибки в глобальный массив, в конце работы его анализировать.М... Снова глобальный. :-|
В общем сферическом случае использование глобальных переменных может казаться некошерным. В частном случае - надо смотреть.
Код возврата, вызванной программы, видимо, не вариант. Сделал на флагах. Чтобы было понятно в какой функции произошла ошибка. Но как-то... А как правильно?Как сказано было выше, у perl есть use Carp; задачу "определить в какой функции ошибка " поможет решитьПро Perl буду знать. Но, увы, в моём случае: shell.
Зачем такое ограничение?? Хотя в bash тоже есть FUNCNAMEAn array variable containing the names of all shell functions currently in the execution call stack.
Делаем функцию die(), которая анализирует и печатает FUNCNAME. Why not?