Обработка ошибок Perl SQLite: выполнение различных действий в соответствии с кодом ошибки
Я новичок в программировании на Perl (и в SO тоже), поэтому мой вопрос может быть сформулирован неверно, но я действительно прочитал много книг и учебных пособий, и я не нашел ничего, касающегося (даже упоминающего) мою проблему.
Я пытаюсь использовать DBI и SQLite для написания некоторого кода, который повторяет запрос вставки, если происходит исправляемая ошибка (БД заполнена или заблокирована и т. Д.), Но умирает, если ошибка не устраняется (БД удалена или повреждена и т. Д.).
Я обнаружил, что интерфейс SQLite C экспортирует коды ошибок:
http://www.sqlite.org/c3ref/c_abort.html
но я не нашел ничего подобного для Perl. Я действительно хочу, чтобы мне не приходилось использовать магические числа в моей самой первой программе Perl!:-)
Кстати, документы и примеры, которые я видел онлайн, очень хорошо объясняют ручную и автоматическую (т.е. с исключениями) обработку ошибок в DBI, но ни один из них не показывает, как выполнять различные действия в зависимости от типа ошибки. Разве это не частый случай использования?
Более того, все они согласны с тем, что DBI::err не является правильной переменной, чтобы указать, какая ошибка произошла. Они более или менее неявно говорят, что DBI::errstr должен использоваться, но мне неловко полагаться на сравнение строк с ориентированной на человека, возможно многострочной строкой ошибки...
Спасибо за любое предложение!
1 ответ
Моя работа с DBI почти всегда была с mysql вместо sqlite3, поэтому я не могу говорить по собственному опыту. Тем не менее, не расстраивайтесь, если вам абсолютно необходимо проверить наличие магических строк и чисел. Главное, как вы это делаете. Всякий раз, когда вам приходится полагаться на магические строки и / или числа, поместите их в константу или хэш в части конфигурации вашего скрипта (или, возможно, даже в файле конфигурации).
Плохая вещь о магических числах / строках заключается в том, что ими трудно управлять, если они меняются, или либо никто не совсем помнит, что создает это условие, и т. Д. Но это смягчается, если вы делаете это правильно и документируете это.
Кстати, если вы только начинаете, я настоятельно рекомендую прочитать "Perl Best Practices" Дамиана Конвея. Я проверил, и он не касается обработки магических строк / чисел, но это все еще лучшая книга, которую я читал на Perl. Пройдя через PBP, взгляните на Perl Critic - это замечательный инструмент, который заставит вас плакать. Он будет помечать магические строки и многое, многое другое:)