{"componentChunkName":"component---src-templates-material-js","path":"/workshops/2021/06/11/pishem-svoego-robota-na-python-urok-/index.html","result":{"pageContext":{"pageParameters":{"isPreview":false,"isMirror":true,"delay_to_show_donate_popup_seconds":7,"about_page":false,"games_page":true,"games_page_link_in_header":false,"donate_popup_show_ru":true,"donate_popup_title_ru":"Без вас — нас не будет","donate_popup_content_ru":"Помогите нам добывать и рассказывать важные истории. Участие каждого — важно!","donate_popup_show_en":true,"donate_popup_title_en":"We can’t do it alone!","donate_popup_content_en":"Help us uncover and share the stories that matter. Every contribution makes a difference","display_regular_donors_banner":false,"showPatreonMethod":true,"useNewMaterialDonationBanner":true,"new_donations_page_design":true,"donations_popup_variants":{"ru":[{"id":"kc19b","title":"Сохраните журналистику для людей в России ","subtitle":"Читают нас прежде всего люди в России, но будущее «Важных историй» зависит от тех, кто живет за пределами страны. Поддержите нас ежемесячным донатом — сохраните независимую журналистику для ваших близких, которые остаются в России.","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"},{"id":"33tc9","title":"У пропаганды есть миллиарды из бюджета. У нас — только вы","subtitle":"Перемены возможны, если независимые от власти журналисты продолжают свою работу день за днем, год за годом. Мы рассказываем важные истории уже шесть лет. Помогите нам продолжать.","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"}],"en":[{"id":"nj1py","title":"Important stories don’t tell themselves","subtitle":"Independent journalism comes at a cost. We answer to no owners or advertisers — only to you, our readers.  Your ongoing support allows us to keep exposing the truth. Without you, we won’t be here.","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"},{"id":"xdfc1","title":"Help us outlast the Kremlin censorship","subtitle":"Censorship lose to journalism that keeps showing up, year after year. Monthly donors are what make that possible","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"},{"id":"ck121","title":"State propaganda has billions to spend. We have only you to rely on","subtitle":"Change happens when independent journalists keep showing up — day after day, year after year. Six years in, we're still showing up. Help us keep going with a monthly donation.","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"}]},"feedback_page":true,"donorsCount":0,"showAuthorsRequestAfterMaterial":true,"radioPage":true,"radioExists":{"ru":true,"en":false},"singlePlaylistPath":{"ru":"/radio/2025/12/22/razgovori-ovazhnikh/index.html"},"with_bookmarks":true,"news_feed":true,"news_feed_skeleton":false,"news_page_redesign":true,"with_topics":true,"materials_topics":false,"topics_page":true,"with_pdf_share":false,"with_native_share":false,"preferred_source_page":true,"charon_new_form":true,"preferred_source_promos":true,"charon_en_page":true},"pk":277,"header":"Пишем своего робота на Python. Урок 8","lead":"Учимся записывать ход работы робота, чтобы отслеживать ошибки, возникающие в наше отсутствие","category":"workshops","entry_image":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-1920x960px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-1920x960px_2x.webp","for_width":1920,"for_height":960,"real_width_1x":1920,"real_width_2x":3840,"real_height_1x":960,"real_height_2x":1920},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-1920x960px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-1920x960px_2x.jpg","for_width":1920,"for_height":960,"real_width_1x":1920,"real_width_2x":3840,"real_height_1x":960,"real_height_2x":1920},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-1272x636px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-1272x636px_2x.webp","for_width":1272,"for_height":636,"real_width_1x":1272,"real_width_2x":2544,"real_height_1x":636,"real_height_2x":1272},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-1272x636px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-1272x636px_2x.jpg","for_width":1272,"for_height":636,"real_width_1x":1272,"real_width_2x":2544,"real_height_1x":636,"real_height_2x":1272},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-912x456px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-912x456px_2x.webp","for_width":912,"for_height":456,"real_width_1x":912,"real_width_2x":1824,"real_height_1x":456,"real_height_2x":912},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-912x456px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-912x456px_2x.jpg","for_width":912,"for_height":456,"real_width_1x":912,"real_width_2x":1824,"real_height_1x":456,"real_height_2x":912},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-600x400px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-600x400px_2x.webp","for_width":600,"for_height":400,"real_width_1x":600,"real_width_2x":1200,"real_height_1x":400,"real_height_2x":800},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-600x400px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-600x400px_2x.jpg","for_width":600,"for_height":400,"real_width_1x":600,"real_width_2x":1200,"real_height_1x":400,"real_height_2x":800},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-360x360px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-360x360px_2x.webp","for_width":360,"for_height":360,"real_width_1x":360,"real_width_2x":720,"real_height_1x":360,"real_height_2x":720},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-360x360px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/20fe06515bac4bf49b7e7822c3e0c72f-360x360px_2x.jpg","for_width":360,"for_height":360,"real_width_1x":360,"real_width_2x":720,"real_height_1x":360,"real_height_2x":720}],"entry_image_credit":"","blocks":[{"data":"Мы продолжаем писать робота, который собирает госконтракты и отправляет выборку на почту. Из прошлого <a href=\"https://istories.media/workshops/2021/06/05/pishem-svoego-robota-na-python-urok-7/\" data-type=\"usual\" target=\"_blank\">выпуска</a> вы узнали, как на этапе написания программы получить сообщение о том, что что-то в нашем коде пошло не так. Но давайте представим ситуацию, когда наш робот уже дописан и каждую неделю присылает нам на почту письмо с собранными контрактами. И вдруг в положенный день письмо не приходит – что-то сломалось. При этом, мы не можем круглосуточно дежурить у компьютера и следить за тем, как выполняется код и в каком месте возникла ошибка. В таких случаях спасает логирование.  ","type":"p","className":""},{"data":{"id":2505,"data":{"url":"https://www.youtube.com/embed/RyLESN51L-0","text":"Видео: Глеб Лиманский","caption":"","provider":"youtube","rawInput":"https://www.youtube.com/watch?v=RyLESN51L-0","ratio_mobile":"16:9","ratio_desktop":"16:9"},"category":"video-embed"},"type":"video-embed"},{"data":"Логирование похоже на запись хода выполнения программы в журнал. Информация из него будет полезна для понимания того, что происходило с программой, когда нас не было рядом, и исправления проблем. Сегодня мы создадим такой лог-файл для нашего робота, но для начала рассмотрим принцип работы логирования на простом примере. Для этого создам чистый файл – logs.py. Импортируем библиотеку logging. Потом создадим простую конструкцию: напишем, что мы хотим сохранить логи в файл, дадим ему название и установим уровень логирования. ","type":"p","className":""},{"data":{"id":2496,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/e37d2fe2d26f46d198e10918051c9fb7-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/e37d2fe2d26f46d198e10918051c9fb7-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":125,"real_height_2x":250},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/e37d2fe2d26f46d198e10918051c9fb7-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/e37d2fe2d26f46d198e10918051c9fb7-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":125,"real_height_2x":250}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Есть несколько уровней логирования, здесь они перечислены в порядке возрастания значимости. Обычно чем больше информации в логах, тем легче понять, что случилось, но когда ее слишком много, разобраться бывает сложно. Поэтому придуманы разные уровни логирования в зависимости от того, насколько значимую информацию мы хотим сохранять. По умолчанию этот уровень WARNING – то есть в логах будут отображаться все сообщения этого уровня и выше (WARNING, ERROR, CRITICAL).&nbsp;Но его можно поменять, указав нужный в параметре level –&nbsp;давайте установим DEBUG –&nbsp;тогда будет записываться информация всех уровней.&nbsp;","type":"p","className":""},{"data":"<li><strong>DEBUG </strong>–&nbsp;подробное и детальное логирование всей системной информации для последующего использования в отладке;</li><li><strong>INFO</strong> – подтверждение, информация о событиях, не приводящих к ошибкам в работе модулей;</li><li><strong>WARNING</strong> – информация о событиях, которые могут привести к ошибкам в работе модулей;</li><li><strong>ERROR</strong> – информация об ошибках, возникших в работе модулей;</li><li><strong>CRITICAL </strong>– информация о критических ошибках, возникших в работе модулей.</li>","type":"ul","className":""},{"data":"После этого для примера напишем простой код с делением на 0: попробуй разделить 10 на 0, а если не получится, если возникнет какая-то ошибка, выведи нам в файл сообщение об этой ошибке. ","type":"p","className":""},{"data":{"id":2497,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/7cb7a5f4dc4346d1b028a9981cb3a3bd-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/7cb7a5f4dc4346d1b028a9981cb3a3bd-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":222,"real_height_2x":444},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/7cb7a5f4dc4346d1b028a9981cb3a3bd-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/7cb7a5f4dc4346d1b028a9981cb3a3bd-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":222,"real_height_2x":444}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Выполним этот код, и теперь у нас на компьютере появился простой файл, в котором содержится следующая информация: уровень сообщения (ERROR) и суть этой ошибки (деление на 0).","type":"p","className":""},{"data":{"id":2498,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/b07cc41297f7412a8597a660ed3c2107-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/b07cc41297f7412a8597a660ed3c2107-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":204,"real_height_2x":408},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/b07cc41297f7412a8597a660ed3c2107-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/b07cc41297f7412a8597a660ed3c2107-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":204,"real_height_2x":408}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Если мы хотим увидеть подробности, можно вместо error написать exception. Вот как в этом случае изменится информация в лог-файле. ","type":"p","className":""},{"data":{"id":2499,"data":{"images":[{"caption":"Код","imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/14deb8ea18a843d08c4445f7e6bcdb9d-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/14deb8ea18a843d08c4445f7e6bcdb9d-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":220,"real_height_2x":440},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/14deb8ea18a843d08c4445f7e6bcdb9d-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/14deb8ea18a843d08c4445f7e6bcdb9d-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":220,"real_height_2x":440}]},{"caption":"Лог-файл","imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/520925220a024dc9be32be04365b1a98-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/520925220a024dc9be32be04365b1a98-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":214,"real_height_2x":427},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/520925220a024dc9be32be04365b1a98-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/520925220a024dc9be32be04365b1a98-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":214,"real_height_2x":427}]}]},"category":"two-images-embed"},"type":"two-images-embed"},{"data":"Регистрировать можно не только ошибки, но и удачные сценарии. Давайте разделим 10 на 10 и попросим напечатать в лог-файл результат. В этом случае мы используем не error или exception, а info. Устанавливать эти уровни в коде важно, чтобы потом не запутаться, в каком случаем это была ошибка, в каком просто информация. ","type":"p","className":""},{"data":{"id":2500,"data":{"images":[{"caption":"Код","imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/78adec493efd4b79b7ca7eb8031bddba-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/78adec493efd4b79b7ca7eb8031bddba-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":282,"real_height_2x":564},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/78adec493efd4b79b7ca7eb8031bddba-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/78adec493efd4b79b7ca7eb8031bddba-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":282,"real_height_2x":564}]},{"caption":"Лог-файл","imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/41745a15568b48d9a7fa7595a1584e9d-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/41745a15568b48d9a7fa7595a1584e9d-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":150,"real_height_2x":300},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/41745a15568b48d9a7fa7595a1584e9d-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/41745a15568b48d9a7fa7595a1584e9d-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":150,"real_height_2x":300}]}]},"category":"two-images-embed"},"type":"two-images-embed"},{"data":"Перейдем к коду, который создает робота. Мы снова импортируем библиотеку logging и создаем файл с логами. Дадим ему имя, установим уровень DEBUG и отформатируем сообщение, которое будет выведено в логах. В примере, который я показывала, мы видели в лог-файле минимум информации. Теперь мы хотим сделать эту информацию более читаемой. Это делается с помощью format. В нем мы прописываем параметры, которые хотим видеть в сообщении: например время, когда действие выполнилось, уровень сообщения, название функции, которая выполняется в этот момент, и наше сообщение. Весь список этих атрибутов можно увидеть в <a href=\"https://docs.python.org/3/library/logging.html \" data-type=\"usual\" target=\"_blank\">документации</a> библиотеки logging. ","type":"p","className":""},{"data":{"id":2501,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/2d8b5541ff9446119c92d808c27c5c6f-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/2d8b5541ff9446119c92d808c27c5c6f-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":62,"real_height_2x":125},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/2d8b5541ff9446119c92d808c27c5c6f-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/2d8b5541ff9446119c92d808c27c5c6f-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":62,"real_height_2x":125}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Дальше мы должны подумать, в какой части кода могут возникнуть ошибки. Давайте оставим нетронутыми наши вспомогательные функции, в которых вряд ли возникнут какие-то ошибки и перейдем к месту, где в теории может что-то сломаться –&nbsp;это наша главная функция get_contracts. Пропишем внутри нее информационное сообщение о том, что выполнение этой функции началось, а в части try – except попросим вывести в случае ошибки сообщение об этой ошибке. При удачном сценарии в лог-файле мы увидим следующую информацию: ","type":"p","className":""},{"data":{"id":2502,"data":{"images":[{"caption":"Код","imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/9bb7c62087b34a38990b08ac4ee4bb5b-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/9bb7c62087b34a38990b08ac4ee4bb5b-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":424,"real_height_2x":848},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/9bb7c62087b34a38990b08ac4ee4bb5b-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/9bb7c62087b34a38990b08ac4ee4bb5b-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":424,"real_height_2x":848}]},{"caption":"Лог-файл","imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/d15e1e0890464b82b60a5669945ff74d-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/d15e1e0890464b82b60a5669945ff74d-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":135,"real_height_2x":270},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/d15e1e0890464b82b60a5669945ff74d-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/d15e1e0890464b82b60a5669945ff74d-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":135,"real_height_2x":270}]}]},"category":"two-images-embed"},"type":"two-images-embed"},{"data":"Давайте проверим, что будет, если подключиться не удастся, например, в случае отключения интернета. Тогда в лог-файле мы увидим, какая конкретно ошибка возникла:&nbsp;","type":"p","className":""},{"data":{"id":2503,"data":{"images":[{"caption":"Отрывок информации из лог-файла в случае проблем с соединением","imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/4ff52418e87e49c690e77f3e6236876a-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/4ff52418e87e49c690e77f3e6236876a-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":328,"real_height_2x":657},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/4ff52418e87e49c690e77f3e6236876a-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/4ff52418e87e49c690e77f3e6236876a-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":328,"real_height_2x":657}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"По такому же принципу добавим логирование и в остальные части кода. Какая информация отобразится в логах при удачных и неудачных сценариях в этих случаях – смотрите в видео-версии этого урока. ","type":"p","className":""},{"data":{"id":2504,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/0e64d06c297a4fa599a3c8334f3b79b5-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/0e64d06c297a4fa599a3c8334f3b79b5-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":806,"real_height_2x":1612},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/0e64d06c297a4fa599a3c8334f3b79b5-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/0e64d06c297a4fa599a3c8334f3b79b5-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":806,"real_height_2x":1612}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Теперь вы знаете принцип логирования выполнения программы в файл, дальше вы можете настроить его под себя и свои потребности, упростить или усложнить. Подробнее про библиотеку logging читайте в официальной <a href=\"https://docs.python.org/3/library/logging.html\" data-type=\"usual\" target=\"_blank\">документации</a>.&nbsp;","type":"p","className":""}],"created_at_date":"2021-06-11","updated_at_date":null,"created_at_date_time":null,"updated_at_date_time":null,"is_exclusive":false,"is_urgent":false,"initially_published_at":"2021-06-11T06:59:48.023Z","has_additional_facts":false,"locale":"ru","has_visualization_without_fallback":false,"spec_project":null,"header_secondary":"","warning":"","is_translated_by_ai":false,"with_donation_banner":true,"donation_banner_header":"","donation_banner_text":"","media_outlet__codename":null,"with_authors_request_banner":false,"faq":[],"_path":"/workshops/2021/06/11/pishem-svoego-robota-na-python-urok-/","is_published":true,"authors_list":[{"id":13,"lead":"Если вы хотите рассказать мне свою историю, пишите на почту sonya.savina@istories.media.","_path":"sonya-savina","avatar":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-896x504px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-896x504px_2x.webp","for_width":896,"for_height":504,"real_width_1x":896,"real_width_2x":1792,"real_height_1x":504,"real_height_2x":1008},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-896x504px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-896x504px_2x.jpg","for_width":896,"for_height":504,"real_width_1x":896,"real_width_2x":1792,"real_height_1x":504,"real_height_2x":1008},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-688x387px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-688x387px_2x.webp","for_width":688,"for_height":387,"real_width_1x":688,"real_width_2x":1376,"real_height_1x":387,"real_height_2x":774},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-688x387px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-688x387px_2x.jpg","for_width":688,"for_height":387,"real_width_1x":688,"real_width_2x":1376,"real_height_1x":387,"real_height_2x":774},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-416x234px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-416x234px_2x.webp","for_width":416,"for_height":234,"real_width_1x":416,"real_width_2x":832,"real_height_1x":234,"real_height_2x":468},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-416x234px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-416x234px_2x.jpg","for_width":416,"for_height":234,"real_width_1x":416,"real_width_2x":832,"real_height_1x":234,"real_height_2x":468},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-336x189px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-336x189px_2x.webp","for_width":336,"for_height":189,"real_width_1x":336,"real_width_2x":672,"real_height_1x":188,"real_height_2x":378},{"format":"jpg","url_1x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-336x189px_1x.jpg","url_2x":"https://static.istories.media/uploaded/images/a0e1983f65dd43929246814147e02504-336x189px_2x.jpg","for_width":336,"for_height":189,"real_width_1x":336,"real_width_2x":672,"real_height_1x":188,"real_height_2x":378}],"lead_en":"","ordering":null,"position":"Авторка","is_public":true,"last_name":"Савина","first_name":"Соня","position_en":"Author","last_name_en":"Savina","first_name_en":"Sonya"}],"external_authors_list":[],"editors_list":[],"external_editors_list":[],"participants_list":[],"external_participants_list":[],"partners_list":[],"case":null,"translated_material":null,"audio_material":null,"text_material":null,"id":277,"topics":[],"meta":{"og_title":"","og_description":"","twitter_title":"","twitter_description":"","og_image":"https://static.istories.media/uploaded/images/share/88d5ef4590594405b1d7d31995a20a8c.jpg","twitter_image":"https://static.istories.media/uploaded/images/share/88d5ef4590594405b1d7d31995a20a8c.jpg","vk_image":"https://static.istories.media/uploaded/images/share/vk/82c121f8132d4c6b8f936dd9b5fe0229.jpg"},"tags":["логирование","python"],"playlist":null,"socialMediaBanners":[{"id":10,"text":"У пропаганды есть миллиарды из бюджета. У нас — только вы","link":"","codename":"donation"},{"id":14,"text":"Список погибших и пропавших без вести российских военных","link":"","codename":"haron"},{"id":18,"text":"","link":"","codename":"mobile_app"},{"id":6,"text":"Оставайтесь на связи: подпишитесь на нашу рассылку","link":"","codename":"newsletter"}]}},"staticQueryHashes":["764694655"],"slicesMap":{}}