Online Python Syntax Checker
OnlineIDE — Online Python Syntax Checker is a web-based tool powered by ACE code editor. This tool can be used to learn, build, run, test your programs. You can open the code from your local and continue to build using this IDE. Scripts and the results can be downloaded.
Please enable JavaScript
Features of this tool
- Simple & Clean Design, Lightweight, Easy & Fast
- Interactive program execution which makes the user to give program inputs at real time
- Helpful for beginners to learn and practice programs
- Dark & Light theme options and customizable code editor with more themes
- Options to Copy or Download the Output of the Program
- Expandable Output Terminal
- Coding sharing option helps you to save your code in cloud so that it can be accessed anytime and anywhere with internet
Download Result
Close File
Your changes will be lost. Are you sure you want to Close the file ?
Do you want to save the file ?
Share the Code
Share the Code
About online-ide.com
OnlineIDE — Online Python Syntax Checker is a web-based tool powered by ACE code editor. This tool can be used to learn, build, run, test your programs. You can open the code from your local and continue to build using this IDE. Scripts and the results can be downloaded.
Keyboard Shortcuts
- Run Code — F8
- Share Code — F9
- Save Code — F10
- Open Editor Command Palette — F1
Report a bug
If you encounter a bug or have questions or suggestions for improvements, please report it via feedback.
Data policy
No data is saved in the server. The code is sent to the server for execution and will be cleared after completion. Shared Code will be saved in the server till the selected expiry period.
Анализ кода в Python
Анализ кода в Python может быть трудной темой, но очень полезной в тех случаях, когда вам нужно повысить производительность вашей программы. Существует несколько анализаторов кода для Python, которые вы можете использовать для проверки своего кода и выяснить, соответствует ли он стандартам. Самым популярным можно назвать pylint. Он очень удобен в настойках и подключениях. Он также проверяет ваш код на соответствие с PEP8, официальным руководством по стилю ядра Python, а также ищет программные ошибки. Обратите внимание на то, что pylint проверяет ваш код на большую часть стандартов PEP8, но не на все. Также мы уделим наше внимание тому, чтобы научиться работать с другим анализатором кода, а именно pyflakes.
Начнем с pylint
Пакет pylint не входит в Python, так что вам нужно будет посетить PyPI (Python Package Index), или непосредственно сайт пакета для загрузки. Вы можете использовать следующую команду, которая сделает всю работу за вас:
Если все идет по плану, то pylint установится, и мы сможем пойти дальше.
Анализ вашего кода
После установки pylint вы можете запустить его в командной строке, без каких либо аргументов, что бы увидеть, какие опции он принимает. Если это не сработало, можете прописать полный путь, вот так:
Теперь нам нужен какой-нибудь код для анализа. Вот часть кода, которая содержит четыре ошибки. Сохраните её в файле под названием crummy_code.py:
Можете увидеть ошибки не запуская код? Давайте посмотрим, может ли pylint найти их!
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
После запуска этой команды вы увидите большую выдачу на вашем экране. Вот частичный пример:
Давайте немного притормозим и разберемся. Сначала нам нужно понять, что означают буквы:
- С – конвенция (convention)
- R – рефакторинг (refactor)
- W – предупреждение (warning)
- E – ошибка (error)
Наш pylint нашел 3 ошибки, 4 проблемы с конвенцией, 2 строки, которые нуждаются в рефакторинге и одно предупреждение. Предупреждение и 3 ошибки – это как раз то, что я искал. Мы попытаемся исправить этот код и устранить ряд проблем. Для начала мы наведем порядок в импортах, и изменить функцию getWeight на get_weight, в связи с тем, что camelCase не используется в названиях методов. Нам также нужно исправить вызов get_weight, чтобы он передавал правильное количество аргументов и исправить его, чтобы “self” выступал в качестве первого аргумента. Взглянем на новый код:
Давайте запустим новый код с pylint и посмотрим, насколько успешно мы провели работу. Для краткости, мы еще раз рассмотрим первую часть:
Как мы видим, это очень помогло. Если мы добавим docstrings, мы можем снизить количество ошибок вдвое. Теперь мы готовы перейти к pyflakes!
Работаем с pyflakes
Проект pyflakes это часть чего-то, что называется Divmod Project. Pyflakes на самом деле не выполняет проверяемый код также, как и pylint. Вы можете установить pyflakes при помощи pip, easy_install, или из другого источника.
Данный сервис может предложить Вам персональные условия при заказе классов на посты и фото в Одноклассники. Приобретайте необходимый ресурс не только со скидками, но и с возможностью подобрать наилучшее качество и скорость поступления.
Мы начнем с запуска pyflakes в изначальной версии той же части кода, которую мы использовали для проверки pylint. Вот и он:
Как мы отмечали в предыдущем разделе, в этом поломанном коде четыре ошибки, три из которых препятствуют работе программы. Давайте посмотрим, что же pyflakes может найти. Попытайтесь запустить данную команду и на выходе вы должны получить следующее:
Несмотря на суперски быструю скорость возврата выдачи, pyflakes не нашел все ошибки. Вызов метода getWeight передает слишком много аргументов, также метод getWeight сам по себе определен некорректно, так как у него нет аргумента self. Что-же, вы, собственно, можете называть первый аргумент так, как вам угодно, но в конвенции он всегда называется self. Если вы исправили код, оперируя тем, что вам сказал pyflakes, код не заработает, несмотря на это.
Подведем итоги
Следующим шагом должна быть попытка запуска pylint и pyflakes в вашем собственном коде, либо же в пакете Python, вроде SQLAlchemy, после чего следует изучить полученные в выдаче данные. Вы можете многое узнать о своем коде, используя данные инструменты. pylint интегрирован с Wingware, Editra, и PyDev. Некоторые предупреждения pylint могут показаться вам раздражительными, или не особо уместными. Существует несколько способов избавиться от таких моментов, как предупреждения об устаревании, через опции командной строки. Вы также можете использовать -generate-rcfile для создания примера файла config, который поможет вам контролировать работу pylint. Обратите внимание на то, что pylint и pyflakes не импортируют ваш код, так что вам не нужно беспокоиться о нежелательных побочных эффектах.

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
Python syntax checker
Python checker allows to check your Python code syntax (Python 3), and find Python errors. This Python code checker tool highlights and goes to line with a syntax error.
To check your code, you must copy and paste, drag and drop a Python file or directly type in the Online Python editor below, and click on «Check Python syntax» button.
You can see the user guide to help you to use this python checker tool.
User guide
- First, Drag and drop your Python file or copy / paste your Python text directly into the editor above.
- Finally, you must click on «Check Python syntax» button to start code checking.
It is quick and easy to analyze python code!
Python code checker tool
Python is a server-side scripting language, but can also be used as a general-purpose programming language.
Python error checker tool allows to find syntax errors (lint). You can test your Python code online directly in your browser.
If a syntax error is detected, then the line in error is highlighted, and it jumps to it to save time (no need to search the line).
It can be useful to make online test to save time (deployment . ).
Note: This tool no longer offers sandbox, it was not good enough.
About Python
Python is an interpreted programming language, it features a dynamic type system and automatic memory management (garbage collector). Python is available for many operating systems.It has a large standard library.
Python formatting is visually uncluttered, and often uses English keywords rather than punctuation. Python uses whitespace indentation instead of curly brackets to delimit blocks.
Python is often used as a programming language in high school and higher education, especially in France (I am French).
Знакомство с тестированием в Python. Ч.1
От нашего стола к вашему. То есть от нашего курса «Разработчик Python», несмотря на стремительно приближающий Новый год, мы подготовили вам интересный перевод о различных методах тестирования в Python.
Это руководство для тех, кто уже написал классное приложение на Python, но еще не писал для
них тесты.
Тестирование в Python — обширная тема с кучей тонкостей, но не обязательно все усложнять. В несколько простых шагов можно создать простые тесты для приложения, постепенно наращивая сложность на их основе.
В этом руководстве вы узнаете, как создать базовый тест, выполнить его и найти все баги, до того как это сделают пользователи! Вы узнаете о доступных инструментах для написания и выполнения тестов, проверите производительность приложения и даже посмотрите на проблемы безопасности.
Тестирование Кода
Тестировать код можно разными способами. В этом руководстве вы познакомитесь с методами от наиболее простых до продвинутых.
Автоматизированное vs. Ручное Тестирование
Хорошие новости! Скорее всего вы уже сделали тест, но еще не осознали этого. Помните, как вы впервые запустили приложение и воспользовались им? Вы проверили функции и поэкспериментировали с ними? Такой процесс называется исследовательским тестированием, и он является формой ручного тестирования.
Исследовательское тестирование — тестирование, которое проводится без плана. Во время исследовательского тестирования вы исследуете приложение.
Чтобы создать полный список мануальных тестов, достаточно составить перечень всех функций приложения, различных типов ввода, которые оно принимает, и ожидаемые результаты. Теперь, каждый раз когда вы меняете что-то в коде, нужно заново проверять каждый из элементов этого списка.
Звучит безрадостно, верно?
Поэтому нужны автоматические тесты. Автоматическое тестирование — исполнение плана тестирования (части приложения, требующие тестирования, порядок их тестирования и ожидаемые результаты) с помощью скрипта, а не руками человека. В Python уже есть набор инструментов и библиотек, которые помогут создать автоматизированные тесты для вашего приложения. Рассмотрим эти инструменты и библиотеки в нашем туториале.
Модульные Тесты VS. Интеграционные Тесты
Мир тестирования полон терминов, и теперь, зная разницу между ручным и автоматизированным тестированием, опустимся на уровень глубже.
Подумайте, как можно протестировать фары машины? Вы включаете фары (назовем это шагом тестирования), выходите из машины сами или просите друга, чтобы проверить, что фары зажглись (а это — тестовое суждение). Тестирование нескольких компонентов называется интеграционным тестированием.
Подумайте о всех вещах, которые должны правильно работать, чтобы простая задача выдала корректный результат. Эти компоненты похожи на части вашего приложения: все те классы, функции, модули, что вы написали.
Главная сложность интеграционного тестирования возникает, когда интеграционный тест не дает правильный результат. Сложно оценить проблему, не имея возможности изолировать сломанную часть системы. Если фары не зажглись, возможно лампочки сломаны. Или может аккумулятор разряжен? А может проблема в генераторе? Или вообще сбой в компьютере машины?
Современные машины сами оповестят вас о поломке лампочек. Определяется это с помощью модульного теста.
Модульный тест (юнит-тест) — небольшой тест, проверяющий корректность работы отдельного компонента. Модульный тест помогает изолировать поломку и быстрее устранить ее.
Мы поговорили о двух видах тестов:
- Интеграционный тест, проверяющий компоненты системы и их взаимодействие друг с другом;
- Модульный тест, проверяющий отдельный компонент приложения.
- Вы можете создать оба теста на Python. Чтобы написать тест для встроенной функции sum(), нужно сравнить выходные данные sum() с известными значениями.
Значения правильные, поэтому в REPL ничего не будет выведено. Если результат sum() некорректный, будет выдана AssertionError с сообщением “Should be 6” (“Должно быть 6”). Проверим оператор утверждения еще раз, но теперь с некорректными значениями, чтобы получить AssertionError :
В REPL вы увидете AssertionError , так как значение sum() не равно 6.
Вместо REPL, положите это в новый Python-файл с названием test_sum.py и выполните его снова:
Теперь у вас есть написанный тест-кейс (тестовый случай), утверждение и точка входа (командной строки). Теперь это можно выполнить в командной строке:
Вы видите успешный результат, “Everything passed” (“Все пройдено”).
sum() в Python принимает на вход любой итерируемый в качестве первого аргумента. Вы проверили список. Попробуем протестировать кортеж. Создадим новый файл с названием test_sum_2.py со следующим кодом:
Выполнив test_sum_2.py , скрипт выдаст ошибку, так как s um() (1, 2, 2) должен быть равен 5, а не 6. В результате скрипт выдает сообщение об ошибке, строку кода и трейсбек:
Можно увидеть, как ошибка в коде вызывает ошибку в консоли с информацией, где она произошла, и каким был ожидаемый результат.
Такие тесты подойдут для простой проверки, но что если ошибки есть больше, чем в одном? На помощь приходят исполнители тестов (test runners). Исполнитель тестов — особое приложение, спроектированное для проведение тестов, проверки данных вывода и предоставления инструментов для отладки и диагностики тестов и приложений.
Выбор Исполнителя Тестов
Для Python доступно множество исполнителей тестов. Например, в стандартную библиотеку Python встроен unittest. В этом руководстве, будем использовать тест-кейсы и исполнители тестов unittest. Принципы работы unittest легко адаптируются для других фреймворков. Перечислим самые популярные исполнители тестов:
- unittest;
- nose или nose2;
- pytest.
unittest встроен в стандартную библиотеку Python, начиная с версии 2.1. Вы наверняка столкнетесь с ним в коммерческих приложениях Python и проектах с открытым исходным кодом.
В unittest есть тестовый фреймворк и исполнитель тестов. При написании и исполнении тестов нужно соблюдать некоторые важные требования.
- Помещать тесты в классы, как методы;
- Использовать специальные методы утверждения. Класс TestCase вместо обычного встроенного выражения assert.
Чтобы превратить ранее написанный пример в тест-кейс unittest, необходимо:
- Импортировать unittest из стандартной библиотеки;
- Создать класс под названием TestSum , который будет наследовать класс TestCase ;
- Сконвертировать тестовые функции в методы, добавив self в качестве первого аргумента;
- Изменить утверждения, добавив использование self.assertEqual() метода в классе TestCase ;
- Изменить точку входа в командной строке на вызов unittest.main() .
Выполнив это в командной строке, вы получите одно удачное завершение (обозначенное .) и одно неудачное (обозначенное F):
Таким образом, вы выполнили два теста с помощью исполнителя тестов unittest.
Примечание: Если вы пишете тест-кейсы для Python 2 и 3 — будьте осторожны. В версиях Python 2.7 и ниже unittest называется unittest 2. При импорте из unittest вы получите разные версии с разными функциями в Python 2 и Python 3.
Чтобы узнать больше о unittest’ах почитайте unittest документацию.
Со временем, после написания сотни, а то и тысячи тестов для приложения, становится все сложнее понимать и использовать данные вывода unittest.
nose совместим со всеми тестами, написанными с unittest фреймворком, и может заменить его тестовый исполнитель. Разработка nose, как приложения с открытым исходным кодом, стала тормозиться, и был создан nose2. Если вы начинаете с нуля, рекомендуется использовать именно nose2.
Для начала работы с nose2 нужно установить его из PyPl и запустить в командной строке. nose2 попытается найти все тестовые скрипы с test*.py в названии и все тест-кейсы, унаследованные из unittest.TestCase в вашей текущей директории:
Так выполняется тест, созданный в test_sum_unittest.py , из исполнителя тестов nose2. nose2 предоставляет множество флагов командной строки для фильтрации исполняемых тестов. Чтобы узнать больше, советуем ознакомиться с документацией Nose 2.
pytest поддерживает выполнение тест-кейсов unittest. Но настоящее преимущество pytest — его тест-кейсы. Тест-кейсы pytest — серия функций в Python-файле с test_ в начале названия.
Есть в нем и другие полезные функции:
- Поддержка встроенных выражений assert вместо использования специальных self.assert*() методов;
- Поддержка фильтрации тест-кейсов;
- Возможность повторного запуска с последнего проваленного теста;
- Экосистема из сотен плагинов, расширяющих функциональность.
Вы избавились от TestCase, использования классов и точек входа командной строки.
Больше информации можно найти на Сайте Документации Pytest.
Написание Первого Теста
Объединим все, что мы уже узнали, и вместо встроенной функции sum() протестируем простую реализацию с теми же требованиями.
Создайте новую папку для проекта, внутри которой создайте новую папку с названием my_sum. Внутри my_sum создайте пустой файл с названием _init_.py . Наличие этого файла значит, что папка my_sum может быть импортирована в виде модуля из родительской директории.
Структура папок будет выглядеть так:
project/
│
└── my_sum/
└── __init__.py
Откройте my_sum/__init__.py и создайте новую функцию с названием sum() , которая берет на вход итерируемые (список, кортеж, множество) и складывает значения.
В этом примере создается переменная под названием total , перебираются все значения в arg и добавляются к total . Затем, по завершении итерации, результат возвращается.
Где Писать Тест
Начать написание теста можно с создания файла test.py , в котором будет содержаться ваш первый тест-кейс. Для тестирования у файла должна быть возможность импортировать ваше приложение, поэтому положите test.py в папку над пакетом. Дерево каталогов будет выглядеть следующим образом:
Вы заметите, что по мере добавления новых тестов, ваш файл становится все более громоздким и сложным для поддержки, поэтому советуем создать папку tests/ и разделить тесты на несколько файлов. Убедитесь, что названия всех файлов начинаются с test_ , чтобы исполнители тестов понимали, что файлы Python содержат тесты, которые нужно выполнить. На больших проектах тесты делят на несколько директорий в зависимости от их назначения или использования.
Примечание: А что есть ваше приложение представляет собой один скрипт?
Вы можете импортировать любые атрибуты скрипта: классы, функции или переменные, с помощью встроенной функции __import__() . Вместо from my_sum import sum напишите следующее:
При использовании __import__() вам не придется превращать папку проекта в пакет, и вы сможете указать имя файла. Это полезно, если имя файла конфликтует с названиями стандартных библиотек пакетов. Например, если math.py конфликтует с math модулем.
Как Структурировать Простой Тест
Перед написанием тестов, нужно решить несколько вопросов:
- Что вы хотите протестировать?
- Вы пишете модульный тест или интеграционный тест?
- Можно ли суммировать список целых чисел?
- Можно ли суммировать кортеж или множество?
- Можно ли суммировать список чисел с плавающей точкой?
- Что будет, если дать на вход плохое значение: одно целое число или строку?
- Что будет, если одно из значений отрицательное?
Код в этом примере:
- Импортирует sum() из пакета my_sum() , который вы создали;
- Определяет новый класс тест-кейса под названием TestSum, наследующий unittest.TestCase ;
- Определяет тестовый метод .test_list_int() для тестирования целочисленного списка. Метод .test_list_int() сделает следующее
- Объявит переменную data со списком значений (1, 2, 3) ;
- Присвоит значение my_sum.sum(data) переменной result ;
- Определит, что значение result равно 6 с помощью метода .assertEqual() на unittest.TestCase классе.
- Определяет точку входа командной строки, которая запускает исполнителя теста unittest .main() .
Как Писать Утверждения
Последний шаг в написании теста — проверка соответствия выходных данных известным значениям. Это называют утверждением (assertion). Существует несколько общих рекомендаций по написанию утверждений:
- Проверьте, что тесты повторяемы и запустите их несколько раз, чтобы убедиться, что каждый раз они дают одни и те же результаты;
- Проверьте и подтвердите результаты, которые относятся к вашим входным данным — проверьте, что результат действительно является суммой значений в примере sum() .
| Метод | Эквивалент |
|---|---|
| .assertEqual(a, b) | a == b |
| .assertTrue(x) | bool(x) is True |
| .assertFalse(x) | bool(x) is False |
| .assertIs(a, b) | a is b |
| .assertIsNone(x) | x is None |
| .assertIn(a, b) | a in b |
| .assertIsInstance(a, b) | isinstance(a, b) |
У .assertIs() , .assertIsNone() , .assertIn() , and .assertIsInstance() есть противоположные методы, называемые .assertIsNot() и тд.
Побочные эффекты
Писать тесты сложнее, чем просто смотреть на возвращаемое значение функции. Зачастую, выполнение кода меняет другие части окружения: атрибуты класса, файлы файловой системы, значения в базе данных. Это важная часть тестирования, которая называется побочные эффекты. Решите, тестируете ли вы побочный эффект до того, как включить его в список своих утверждений.
Если вы обнаружили, что в блоке кода, который вы хотите протестировать, много побочных эффектов, значит вы нарушаете Принцип Единственной Ответственности. Нарушение принципа единственной ответственности означает, что фрагмент кода делает слишком много вещей и требует рефакторинга. Следование принципу единственной ответственности — отличный способ проектирования кода, для которого не составит труда писать простые повторяемые модульные тесты, и, в конечном счете, создания надежных приложений.
Запуск Первого Теста
Вы создали первый тест и теперь нужно попробовать выполнить его. Понятно, что он будет пройден, но перед созданием более сложных тестов, нужно убедиться, что даже такие тесты выполняются успешно.
Запуск Исполнителей Тестов
Исполнитель тестов — приложение Python, которое выполняет тестовый код, проверяет утверждения и выдает результаты тестирования в консоли. В конец test.py добавьте этот небольшой фрагмент кода:
Это точка входа командной строки. Если вы выполните этот скрипт, запустив python test.py в командной строке, он вызовет unittest.main() . Это запускает исполнителя тестов, обнаруживая все классы в этом файле, наследуемые из unittest.TestCase .
Это один из многих способов запуска исполнителя тестов unittest. Если у вас есть единственный тестовый файл с названием test.py , вызов python test.py — отличный способ начать работу.
Другой способ — использовать командную строку unittest. Попробуем:
Это исполнит тот же самый тестовый модуль (под названием test ) через командную строку. Можно добавить дополнительные параметры для изменения выходных данных. Один из них -v для многословности (verbose). Попробуем следующее:
Мы исполнили один тест из test.py и вывели результаты в консоль. Многословный режим перечислил имена выполненных тестов и результаты каждого из них.
Вместо предоставления имени модуля, содержащего тесты, можно запросить авто-обнаружение при помощи следующего:
Эта команда будет искать в текущей директории файлы с test*.py в названии, чтобы протестировать их.
При наличии нескольких тестовых файлов и соблюдении шаблона наименования test*.py , можно передать имя директории при помощи -s флага и названия папки.
unittest запустит все тесты в едином тестовом плане и выдаст результаты.
Наконец, если ваш исходный код находится не в корневом каталоге, а в подкаталоге, например в папке с названием src/, можно с помощью -t флага сообщить unittest, где выполнять тесты, для корректного импорта модулей:
unittest найдет все файлы test*.py в директории src/ внутри tests , а затем выполнит их.
Понимание Результатов Тестирование
Это был очень простой пример, где все прошло успешно, поэтому попробуем понять выходные данные проваленного теста.
sum() должен принимать на вход другие списки числового типа, например дроби.
К началу кода в файле test.py добавьте выражение для импорта типа Fraction из модуля fractions стандартной библиотеки.
Теперь добавим тест с утверждением, ожидая некорректное значение. В нашем случае, ожидаем, что сумма ¼, ¼ и ⅖ будет равна 1:
Если вы запустите тесты повторно с python -m unittest test, получите следующее:
В этих выходных данных вы видите следующее:
- В первой строке указаны результаты выполнения всех тестов: один проваленный (F), один пройденный (.);
- FAIL показывает некоторые детали проваленного теста:
- Название тестового метода ( test_list_fraction );
- Тестовый модуль ( test ) и тест-кейс ( TestSum );
- Трейсбек строки с ошибкой;
- Детали утверждения с ожидаемым результатом (1) и фактическим результатом (Fraction(9, 10))
Запуск тестов из PyCharm
Если вы используете PyCharm IDE, то можете запустить unittest или pytest, выполнив следующие шаги:
- В окне Project tool, выберите директорию tests.
- В контекстном меню выберите команду запуска unittest. Например, ‘Unittests in my Tests…’.

Больше информации доступно на сайте PyCharm.
Запуск Тестов из Visual Studio Code
Если вы пользуетесь Microsoft Visual Studio Code IDE, поддержка unittest, nose и pytest уже встроена в плагин Python.
Если он у вас установлен, можно настроить конфигурацию тестов, открыв Command Palette по Ctrl+Shift+P и написав “Python test”. Вы увидите список вариантов:

Выберите Debug All Unit Tests, после чего VSCode отправит запрос для настройки тестового фреймворка. Кликните по шестеренке для выбора исполнителя тестов (unittest) и домашней директории (.).
По завершении настройки, вы увидите статус тестов в нижней части экрана и сможете быстро получить доступ к тестовым логам и повторно запустить тесты, кликнув по иконкам:

Видим, что тесты выполняются, но некоторые из них провалены.
В следующей части статьи мы рассмотрим тесты для фреймворков, таких как Django и Flask.
Ждём ваши вопросы и комментарии тут и, как всегда, можно зайти к Станиславу на день открытых дверей.