Шифр Цезаря
Модуль this.py, который выводит Zen of Python, выглядит так.
Строка s зашифрована с помощью ROT13 — все буквы сдвинуты на 13 позиций. Кстати, так же иногда скрывают спойлеры, что многих бесит.
Модуль this.py, который выводит Zen of Python, выглядит так.
Строка s зашифрована с помощью ROT13 — все буквы сдвинуты на 13 позиций. Кстати, так же иногда скрывают спойлеры, что многих бесит.
Дядя Барри
1 первого апреля 2009 года Гвидо ван Россум заявил, что уходит в отставку, чтобы сосредоточиться на покорении Эвереста, и теперь официально значится как Benevolent Dictator Emeritus Vacationing Indefinitely from the Language (BDEVIL) — или Великодушный почетный диктатор, отдыхающий от языка в течение неопределенного срока. На его место якобы пришел Барри Уорсоу (или Дядя Барри). И тут же ввел несколько изменений и обругал Python 3.0 и Си.
Все это оказалось первоапрельской шуткой, отголоски которой все еще можно найти в интерпретаторе.
1 первого апреля 2009 года Гвидо ван Россум заявил, что уходит в отставку, чтобы сосредоточиться на покорении Эвереста, и теперь официально значится как Benevolent Dictator Emeritus Vacationing Indefinitely from the Language (BDEVIL) — или Великодушный почетный диктатор, отдыхающий от языка в течение неопределенного срока. На его место якобы пришел Барри Уорсоу (или Дядя Барри). И тут же ввел несколько изменений и обругал Python 3.0 и Си.
Все это оказалось первоапрельской шуткой, отголоски которой все еще можно найти в интерпретаторе.
Целых 4 отсылки на Монти Пайтон
Гвидо ван Россум любит это шоу, и даже в документации указал, что: «Язык назван в честь шоу Би-би-си “Летающий цирк Монти Пайтона” и не имеет никакого отношения к рептилиям. Ссылки на скетчи Монти Пайтон в документации не только разрешены, но и поощряются!». Так что неудивительно, что в самом языке есть несколько отсылок к шоу.
Гвидо ван Россум любит это шоу, и даже в документации указал, что: «Язык назван в честь шоу Би-би-си “Летающий цирк Монти Пайтона” и не имеет никакого отношения к рептилиям. Ссылки на скетчи Монти Пайтон в документации не только разрешены, но и поощряются!». Так что неудивительно, что в самом языке есть несколько отсылок к шоу.
Можно и нужно использовать try — except
KeyError
Если при чтении файла метод json.loads() возвращает вместо словаря список, то при попытке обратиться к ключу message можно схватить такое исключение.
Эту ошибку легко допустить, когда не знаешь тип возвращаемого объекта.
Представьте, что мы выгружаем логи бота по дням, а в выходные не случилось ни одной беседы. Тогда программа вернет объект None («ничего») про воскресенье, и у него тоже нет ключа ‘message’. Здесь try — except играет важную роль: навесив такой блок, мы обработаем ситуацию с пустотами.
KeyError
Если при чтении файла метод json.loads() возвращает вместо словаря список, то при попытке обратиться к ключу message можно схватить такое исключение.
Эту ошибку легко допустить, когда не знаешь тип возвращаемого объекта.
Представьте, что мы выгружаем логи бота по дням, а в выходные не случилось ни одной беседы. Тогда программа вернет объект None («ничего») про воскресенье, и у него тоже нет ключа ‘message’. Здесь try — except играет важную роль: навесив такой блок, мы обработаем ситуацию с пустотами.
IndexError
Допустим, мы и дальше получаем список реплик бота, причем каждый день длина этого перечня разная. Если все же приходится при создании цикла опираться на некую константу, которая с количеством реплик не всегда совпадает, try — except поможет справиться с ошибкой индекса.
Указываем во второй части конструкции, с какой ошибкой может столкнуться скрипт.
Допустим, мы и дальше получаем список реплик бота, причем каждый день длина этого перечня разная. Если все же приходится при создании цикла опираться на некую константу, которая с количеством реплик не всегда совпадает, try — except поможет справиться с ошибкой индекса.
Указываем во второй части конструкции, с какой ошибкой может столкнуться скрипт.
TypeError + ValueError
Если вы, скажем, планируете оперировать тем, что ввел пользователь, то input() может сыграть с вами злую шутку.
По умолчанию метод возвращает строку, а мы-то предполагаем целочисленное значение.
try, в принципе, может справиться с такой ситуацией, если вы понимаете типы данных для проводимых операций (в данном случае, сложения).
Если вы, скажем, планируете оперировать тем, что ввел пользователь, то input() может сыграть с вами злую шутку.
По умолчанию метод возвращает строку, а мы-то предполагаем целочисленное значение.
try, в принципе, может справиться с такой ситуацией, если вы понимаете типы данных для проводимых операций (в данном случае, сложения).
Бонусный прием
В PEP 654 были объявлены группы исключений (Exception Groups): они позволяют заложить в одну строку except сразу несколько типов ошибок.
Если исследовать типы ошибок нет времени, можно на скорую руку заложить в такую группу все популярные ошибки и обернуть блоком try — except всю программу.
В PEP 654 были объявлены группы исключений (Exception Groups): они позволяют заложить в одну строку except сразу несколько типов ошибок.
Если исследовать типы ошибок нет времени, можно на скорую руку заложить в такую группу все популярные ошибки и обернуть блоком try — except всю программу.
Не стоит использовать try — except
AttributeError
Представим, что мы храним текстовые документы в специализированной базе: текст (text) и координаты его вектора в многомерном пространстве (values).
Библиотека langchain, когда запрашивает близкие по смыслу предложения, ищет близконаправленные вектора и возвращает список документов res в преобразованном виде.
Если по квадратным скобкам узнать список в этом выводе можно, то определить, что каждый элемент — кортеж, уже сложнее. Блок try в таких ситуациях малоприменим, ибо тип данных задан автором библиотеки. Не ясно, какую ошибку класть в except.
AttributeError
Представим, что мы храним текстовые документы в специализированной базе: текст (text) и координаты его вектора в многомерном пространстве (values).
Библиотека langchain, когда запрашивает близкие по смыслу предложения, ищет близконаправленные вектора и возвращает список документов res в преобразованном виде.
Если по квадратным скобкам узнать список в этом выводе можно, то определить, что каждый элемент — кортеж, уже сложнее. Блок try в таких ситуациях малоприменим, ибо тип данных задан автором библиотеки. Не ясно, какую ошибку класть в except.
ImportError
Те из нас, кто привык работать в ноутбуках на базе Google Colaboratory / Jupyter Notebook, помнят, что в среду предустановлено множество популярных сторонних инструментов, и дополнительно их устанавливать командой pip не нужно.
При работе с классической Python-программой легко забыть, что тот или иной инструмент не подключен. Или, что еще хуже, для данной версии Python не предусмотрена конкретная версия библиотеки. Недавно при запуске скрипта с langchain на Python 3.9. я была вынуждена обновлять языковой пакет до 3.11.5, ибо нужная langchain==0.0.194 в 3.9 попросту недоступна.
Для таких ситуаций try — except малополезен. С подключаемыми инструментами все равно придется разбираться вручную.
Те из нас, кто привык работать в ноутбуках на базе Google Colaboratory / Jupyter Notebook, помнят, что в среду предустановлено множество популярных сторонних инструментов, и дополнительно их устанавливать командой pip не нужно.
При работе с классической Python-программой легко забыть, что тот или иной инструмент не подключен. Или, что еще хуже, для данной версии Python не предусмотрена конкретная версия библиотеки. Недавно при запуске скрипта с langchain на Python 3.9. я была вынуждена обновлять языковой пакет до 3.11.5, ибо нужная langchain==0.0.194 в 3.9 попросту недоступна.
Для таких ситуаций try — except малополезен. С подключаемыми инструментами все равно придется разбираться вручную.
Необычные приёмы нарезки списков на Python
Получение части элементов из списка является распространённым требованием. В Python оператор slice состоит из трёх компонентов.
“start”: начальный индекс (значение по умолчанию равно 0).
“end”: конечный индекс (значение по умолчанию - длина списка).
“step”: определяет размер шага при итерациях по списку (значение по умолчанию равно 1).
Получение части элементов из списка является распространённым требованием. В Python оператор slice состоит из трёх компонентов.
“start”: начальный индекс (значение по умолчанию равно 0).
“end”: конечный индекс (значение по умолчанию - длина списка).
“step”: определяет размер шага при итерациях по списку (значение по умолчанию равно 1).
Используйте виртуальное окружение
Виртуальное окружение (virtual environment) — надстройка, которая обеспечивает две вещи.
Изоляцию зависимостей. У каждого окружения будет собственный набор библиотек, изолированный от системного языкового пакета. Это гарантирует, что уязвимости в последних не навредят проекту.
Контроль версий. Виртуальное окружение позволит зафиксировать разновидность используемых библиотек с помощью requirements.txt или другого файла конфигурации. Код, скопированный из многолетнего треда на StackOverflow, часто выдает ошибку именно из-за этого. Если вы работаете с несколькими проектами, требующими разных версий одной и той же библиотеки, virtualenv поможет их «развести по углам».
Виртуальное окружение (virtual environment) — надстройка, которая обеспечивает две вещи.
Изоляцию зависимостей. У каждого окружения будет собственный набор библиотек, изолированный от системного языкового пакета. Это гарантирует, что уязвимости в последних не навредят проекту.
Контроль версий. Виртуальное окружение позволит зафиксировать разновидность используемых библиотек с помощью requirements.txt или другого файла конфигурации. Код, скопированный из многолетнего треда на StackOverflow, часто выдает ошибку именно из-за этого. Если вы работаете с несколькими проектами, требующими разных версий одной и той же библиотеки, virtualenv поможет их «развести по углам».
%%html
Отрендерит ячейку как код HTML. Таким же образом исполнит код на Javascript, Perl или Ruby! Вот это действительно удивительное дополнение. Только используйте с осторожностью!
Более того, для учебы нередко пригождается верстка формул на специальном стандарте LaTeX, или справочной информации на Markdown. Для самых креативных предусмотрели даже рендеринг из .svg.
Отрендерит ячейку как код HTML. Таким же образом исполнит код на Javascript, Perl или Ruby! Вот это действительно удивительное дополнение. Только используйте с осторожностью!
Более того, для учебы нередко пригождается верстка формул на специальном стандарте LaTeX, или справочной информации на Markdown. Для самых креативных предусмотрели даже рендеринг из .svg.