Как обрабатывать ошибки в скриптах правильно

  • Автор темы Автор темы Xander
  • Дата начала Дата начала

Xander

Знакомый
Пользователь
Сообщения
12
Счётчик реакций
2
Очки
13
Коллеги, часто вижу, как в погоне за функциональностью про безопасность и обработку ошибок в скриптах забывают. А потом в 3 часа ночи получаем алерт, что критичный процесс упал без логов. Давайте разберём основы, которые спасут ваши нервы и продакшен.

1. Обработка ошибок — это must-have
Скрипт не должен «падать» молча. Всегда используйте try-except в Python, try-catch в JS, проверку кодов возврата в Bash.

Пример на Python:
Python:
import logging

logging.basicConfig(filename='app.log', level=logging.ERROR)

try:
    result = risky_operation()
except ValueError as e:
    logging.error(f"Validation error: {e}")
    # Корректное завершение или повтор
except Exception as e:
    logging.critical(f"Unexpected error: {e}")
    raise  # Или безопасный выход

2. Безопасность ввода — никогда не доверяйте данным извне
Особенно критично в скриптах, которые вызывают shell-команды. Всегда валидируйте и санитизируйте входные данные перед использованием.

3. Конфиденциальные данные — только в переменных окружения
Никаких паролей, токенов или ключей API в коде! Используйте .env файлы (с добавлением в .gitignore) или секреты в CI/CD.

4. Права доступа — принцип минимальных привилегий
Запускайте скрипт с правами, которые действительно нужны. Избегайте sudo без крайней необходимости.

5. Логирование — ваши глаза в продакшене
Пишите не только ошибки, но и ключевые события. Структурированные логи (JSON) упростят анализ в ELK-стеке.

6. Идемпотентность — залог предсказуемости
Скрипт должен выдавать одинаковый результат при многократном запуске. Это критично для задач перезапуска и восстановления.

Итог: Эти практики — не «over-engineering», а базовый уровень профессионализма. Они экономят часы отладки, предотвращают инциденты безопасности и делают ваши системы устойчивыми. Какие из этих пунктов вы уже применяете, а какие стоит внедрить в ближайший спринт?
 
Назад
Вверх