По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
  Перехват исключений в Python помогает уменьшить количество возникающих в программе сбоев. Таким образом, ваш код становится более надежным, а пользователям становится проще с ним работать. В этой статье я расскажу, как перехватывать несколько исключений в одном блоке  try/except   в Python. 1. Что такое исключения в Python? В Python исключения – это механизм взаимодействия различных частей программы. Этот механизм позволяет одной части системы уведомлять о том, что она столкнулась с некой критической ошибкой и не знает, как с ней справиться.  В таком случае вызывается исключение. Другая часть программы, которая знает, как справиться с этой ошибкой, перехватывает это исключение и выполняет ее обработку надлежащим образом. Если исключения не обработать, это может привести к сбою программы. Так что, обработка исключений позволяет уберечь вашу программу от сбоя и сделать ее более надежной.  Важность обработки нескольких исключений в Python Это помогает избежать дублирования кода, так как несколько исключений обрабатываются одним и тем же блоком. Это также упрощает чтение, редактирование и удаление кода. Кроме того, это помогает писать более эффективный код, так как тип ошибки нужно проверять не несколько, а лишь один раз.   2. Обработка нескольких исключений Перехват нескольких исключений означает, что несколько исключений перехватываются одним и тем же блоком  except . В Python вы можете перехватывать разные исключения отдельными блоками. Или же, если вы хотите обрабатывать исключения вместе, вы можете обрабатывать их с помощью одного блока. Для этого вам нужно будет перехватить сразу несколько исключений. Здесь я расскажу и покажу на примере, как это можно сделать. #1. Перехват разных исключений разными блоками Допустим, что у нас есть программа, которая принимает на вход два различных числа и делит их друг на друга. В этой программе мы предполагаем, что, когда пользователь будет вводить недопустимые значения, будут возникать различные типы исключений. Так, в частности мы собираемся обрабатывать исключения  ValueError и  ZeroDivisionError . Исключение  ValueError будет вызываться тогда, когда пользователь будет вводить значение, которое невозможно преобразовать в целое число. А исключение  ZeroDivisionError будет вызываться тогда, когда второе вводимое число будет равно нулю. И там, и там мы будем отображать сообщение об ошибке, которое гласит: «Вы ввели недопустимое значение» (You entered an invalid value). Чтобы реализовать все, что мы описали выше, напишем следующий код: try:    dividend = int(input('Enter first num: '))    divisor = int(input('Enter second num: '))    quotient = dividend / divisor    print(quotient) except ValueError as e:    print("You entered an invalid value") except ZeroDivisionError as e:    print("You entered an invalid value") except Exception as e:    print("Something went wrong") Если мы запустим этот код и введем текст, который нельзя преобразовать в целое число, то получим следующий результат: Если же мы введем в качестве второго числа ноль, то получим вот такой результат: Код работает ровно так, как мы и ожидали, но обратите внимание, что мы обрабатываем исключения  ValueError и  ZeroDivisionError одинаково. Получается, что мы практически дублируем блоки  except . Это далеко от идеала, так как мы нарушаем один из принципов программирования – DRY (Don’t Repeat Yourself – Не повторяйся). Так что, вместо того, чтобы писать два отдельных блока, мы можем объединить их в один, который будет перехватывать несколько исключений. Если мы это сделаем, то сможем избежать повторов. #2. Перехват нескольких исключений в одном блоке  except Для того, чтобы перехватить несколько исключений, мы выделяем кортеж, в котором указаны все ошибки, которые мы хотим перехватить. Вот пример, где мы перехватываем в одном блоке  except два исключения -  ValueError и  ZeroDivisionError: try:    dividend = int(input('Enter first num: '))    divisor = int(input('Enter second num: '))    quotient = dividend / divisor    print(quotient) except (ValueError, ZeroDivisionError) as e:    print("You entered an invalid value") except Exception as e:    print("Something went wrong") Эта реализация намного лучше, чем предыдущий код. По сути, это и есть обработка нескольких исключений. Код, который приведен выше, работает аналогично предыдущему. Так что, если вы тестируете его, используя предыдущие примеры, все должно работать как раньше: #3. Определяем, какое исключение было перехвачено Приведенный выше код выполняет первый блок  except , когда обнаружена ошибка  ValueError или  ZeroDivisionError . В некоторых случаях возможно такое, что вы хотите выполнить какой-то код для обеих ошибок и какой-то еще код только для одной из них.  В таком случае для начала нужно определить, какая ошибка была перехвачена, после чего выполнить соответствующий код. Для того, чтобы определить, какое исключение было перехвачено, вы можете добавить внутрь блока  except блок  if/else . Вот пример: try:    dividend = int(input('Enter first num: '))    divisor = int(input('Enter second num: '))    quotient = dividend / divisor    print(quotient) except (ValueError, ZeroDivisionError) as e:    print("You entered an invalid value")    if isinstance(e, ValueError):        print('Value Error')    else:        print('Zero Division Error') except Exception as e:    print("Something went wrong") Здесь, помимо того, что для  ValueError и  ZeroDivisionError мы печатаем сообщение об ошибке, мы также проверяем, ошибку какого типа мы обнаружили, и печатаем еще одно сообщение. Если мы запустим код еще раз, мы увидим дополнительное сообщение, касающееся перехваченного исключения. 3. Когда необходимо обрабатывать несколько исключений? В общем случае обработка нескольких исключений идеально подходит, если вы хотите выполнить один и тот же код для похожих исключений, например, Сетевые запросы, которые не удалось выполнить по разным причинам. Независимо от причины, вы можете уведомить пользователя о том, что сервер на данный момент недоступен. Сбои соединения с базой данных, которые могут привести к ряду ошибок. И несмотря на то, что эти ошибки могут быть разными, принцип их обработки может быть одинаковый. Файловый ввод-вывод также может вызывать ошибки, которые можно обрабатывать одинаково, например, ошибки прав доступа или ошибки записи на диск. Заключение В этой статье мы рассмотрели, как можно объединить несколько блоков  except в один, одновременно перехватывая несколько исключений. Это может помочь вам сделать ваш код более читабельным и удобным в сопровождении.
img
  Отслеживание версий программного обеспечения – довольно сложная задача, и Git помогает с ней справиться. С помощью теговой системы Git вы можете создавать версионированные номера версий, которые бы указывали на определенные коммиты, и использовать их в автоматизации CI/CD для публикации версий.  Тегированные версии в Git Теги Git очень напоминают ветки Git. Это отметки, которые указывают на определенные коммиты, и их можно использовать для извлечения репозитория в определенный момент времени. Однако их нельзя обновить или изменить (в отличие от ветвей), и они всегда указывают на конкретную версию. Как правило, теги используются для присвоения определенным выпускам номеров версий, и в большинстве случаев для этого используется формат семантического версионирования (Major.Minor.Patch). Такой подход довольно полезен с точки зрения отслеживания версий, особенно если при развертывании возникают проблемы и необходимо вернуться к последнему одобренному тегу.  Кроме того, теги используются для передачи сигнала конвейерам CI/CD о том, что необходимо опубликовать версию. Некоторые репозиторию могут быть настроены на публикацию «последнего» выпуска для каждого отдельного коммита, особенно после тестирования ветвей разработки. Также теги часто используют для того, чтобы CI-конвейеры выпуска запускались и развертывались только по специальному запросу. Когда вы отправляете изменения в удаленный репозиторий, например, GitHub, ваши теги будут отображаться во вкладке «Releases» (Версии). Таким образом, другие люди могут клонировать и загружать репозитории по этому тегу.  Выгрузить определенные теги можно с помощью команды git checkout что аналогично извлечению ветки.  git checkout v1.0.0 Создание тегов Для того, чтобы создать простой тег, много сил вам не потребуется. Вам нужно просто извлечь коммит или ветку, которой вы хотите присвоить тег, и запустить команду  git tag с названием тега.  git checkout master git tag v1.0.0 В любом случае есть общепринятая практика, которая подразумевает использование комментированных тегов, то есть тегов, которые позволяют задавать описание и могут хранить дополнительную информацию о том, кто их создал и когда (по аналогии с коммитами). git tag -a v1.0.0 -m "New Release Version - Summary" Кроме того, вы можете присваивать теги коммитам, которые были созданы ранее, при этом не извлекая их: git tag -a v1.2 commit_id Теги нельзя отправлять в удаленные репозитории, такие как GitHub, с помощью стандартной команды Git  push . Эту команду необходимо запускать с флагом  --tags или отправлять имя тега вручную. git push origin --tags Удаление и редактирование тегов Теги можно удалять, но важно помнить, что, если вы удалите теги с удаленных серверов, то можете подпортить работу других людей, которые работают с вашим репозиторием. Однако, так как вы на самом деле не редактируете историю Git, то это больше похоже на удаление старой ветки, которая не затрагивает ни один из текущих коммитов.  Вы можете удалить тег по имени с помощью флага  -d : git tag -d v1.0.0 Вы даже можете удалить их из удаленного репозитория с помощью следующей команды: git push origin --delete v1.0.0 А для того, чтобы отредактировать тег, вам понадобиться флаг  -f , который заставит Git переписать существующий тег: git tag -f v1.0.0 Создание версий на GitHub GitHub также поддерживает теги, но расширяет их возможности за счет собственной системы версий (Releases). Версии можно создать из тегов, любого конкретного коммита или с помощью указателя HEAD на любую текущую ветку.  Основная цель публикации версий – предоставить людям для загрузки заранее собранные двоичные файлы. Такая функция довольно полезна на GitHub, но теги ее предоставить не могут. В случае тегов пользователям все равно придется клонировать определенный тег и производить сборку из исходного кода. Еще одна цель – документирование примечаний к версиям. Система версий GitHub также поддерживает Markdown. Таким образом, пользователи могут легко просматривать версии и наблюдать за их большими изменениями с течением времени. Создать версию довольно легко. Нажмите «Releases» на боковой панели вашего репозитория и создайте новую версию: На этом экране вы можете ввести примечания к версии с помощью Markdown и перетащить двоичные файлы, необходимые для этой версии. GitHub автоматически предоставит вам ссылку на исходный код по этому тегу. Кроме того, вы можете создавать версии автоматически с помощью GitHub Actions. Это избавит вас от постоянной загрузки двоичных файлов. Таким образом, вы сможете автоматизировать ваш репозиторий.
img
Фаервол на Микротике основан на базе принципов iptables в Linux позволяет фильтровать входящий и исходящий трафик по определенным правилам. В статье мы хотим рассказать про ключевые компоненты Firewall, дизайне и реализации этого инструмента. Погнали! Общее представление Основная идея любого фаервола это определение того, что разрешено и запрет всего остального. Так работают все современные инструменты фильтрации. При наличии фаервола, сеть можно разделить на ненадежные, полу - надежные и надежные. Firewall Chains Цепочки (последовательности) фаерволов сопоставляют по своим правилам входящий и исходящий с интерфейса трафик. После того, как трафик попал под определенное правило («сматчился»), вы можете совершать определенные манипуляции с ним: разрешить, блокировать, отклонить, внести в лог запись и так далее. В Mikrotik есть следующие флаги: Input, Output и Forward. Input Chain Input матчит входящий на интерфейсы маршрутизатора трафик. Условно говоря – это прилетающие на роутера IP - пакеты. Обычная практика – дропать пакеты, прилетающие на WAN, направленные на сканирование портов, попытки взлома и прочие. Помимо этого, многие блокируют входящий трафик изнутри локальной сети (например, допуск к Winbox или SSH должен быть только с определенного VLAN – остальные дропаются). Всегда используйте VLAN – это базовое разграничение, которое позволит вам обеспечить современные стандарты безопасности. Output Chain Как можно догадаться по названию, данный инструмент направлен на фильтрацию исходящего от роутера трафика. Здесь можно блокировать запросы, исходящие непосредственно с роутера: например, DNS или ICMP запрос с роутера. Forward Chain Самое интересное – данный инструмент «матчит» трафик проходящий через Mikrotik с одного интерфейса на другой. Пример: пакет, отправленный с хоста внутри LAN через маршрутизатор в сторону провайдера. Пакет прилетает на внутренний интерфейс, а выходит через WAN. Firewall Actions Правила на фаерволе могут делать множество вещей, основные из которых: accept (принять), drop (сбросить) и отклонить (reject). Accept Данное правило позволяет просто «пропустить» проходящий через фаервол трафик. Никакой модификации или изменения маршрута – пакету будет позволено продолжить свой изначальный путь. Reject Фаервол может легко отклонить (сделать reject) пакетов, которые попадут под определенное правило. При этом, источнику такого пакета будет отправлено уведомление о соответствующей блокировке. В данном методе есть один весомый минус: в случае, если злоумышленник попробует «сканировать» порты или совершить другой вид атаки – отправленные в его сторону REJECT сообщения лишь помогут ему в злодеяниях. Поэтому, в целях безопасности, мы рекомендуем использовать DROP. Drop Данное правило «дропает» пакет без отправления уведомления об этом источнику. Этот метод наиболее безопасен на этапе защиты своего Mikrotik от сканирования портов и прочих атак. Firewall Rules Правила Firewall определяют пакеты, которые будут обработаны на уровне фаервола, а какие будут отброшены. Каждое правило – это комбинация параметров IP – адресации (источник/получатель пакета), цепочек (chains), действий (actions), интерфейсов и прочих опций. Как мы говорили ранее – хорошо настроенный фаервол пропустит только необходимый для бизнеса трафика, дав запрет на пропуск всего остального потока трафика. Указывая набор разрешающих правил, всегда замыкайте их на конце строчкой «DENY ALL» (запретить все). Chains Каждое создаваемое правило назначается определенной цепочке (chain). После определения принадлежности к цепочке, пакеты проходят проверку через последовательность правил в порядке убывания (сверху вниз). Порядок правил в фаерволе играет важную роль! Поэтому, от последовательности проверки зависит эффективность фильтрации. Actions Правило отрабатывает по одному из основных действий: принять (accept), отклонить (reject) и отбросить (drop). Выше мы подробнее рассказывали про каждое из указанных действий. Адресация Нашему правилу можно сказать, по какому критерию проводить блокировку: это может быть протокол, IP – адрес (это может быть как хост с /32 маской, так и целая подсеть с /24, например). Помимо этого, критерием могут быть физические или логические интерфейсы (eth/GRE). Комментарии Создавая правила комментируйте их. Это важно, как и при программировании – код без комментариев очень сложно анализировать и понимать в будущем. Советы Хотим так же поделиться парой полезных советов по настройке Firewall: Разрешайте только необходимый для работы трафик - да, это сложно. Но методом проб и ошибок мы рекомендуем добиться той настройки фаервола, в рамках которой все ваши подключения будут ясны и понятны. Подключения только с определенного пула адресов - это может быть удаленный офис, IP – адреса ЦОД или VPN адресация. Тут нужно быть особенно бдительным. В конце правил всегда используйте «deny all» - после того, как вы выполнили первую и вторую рекомендации и весь тип трафика по протоколам, адресации, источникам (в том числе L7, например) четко определен – в конце цепочки добавьте правило запрета всего. Это будет означать, дословно: «Все, что не разрешено - запрещено». Атакуйте свою сеть! - да, да, вы не ослышались. Конечно, без фанатизма :) Мы предлагаем периодически сканировать порты на вашем фаерволе. Например, это можно делать с помощью утилиты исследования сети Nmap.
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59