Python выход из программы

Python выход из программы

Как сделать раннее завершение программы в Python? В самоучителе я нашёл несколько примеров:

Однако там не было объяснения какой метод лучше. Какой метод является наиболее «безаварийным»?

И заодно: есть ли в Python понятие Autocloseable объектов? Если я сделаю ранее завершение программы, нужно ли мне будет закрывать файлы и т.д.?

1 Ответы

Короткий ответ:
Лучше использовать sys.exit()

Механизм завершения процесса в Python реализован через бросание исключения SystemExit , таким образом можно просто создать подобное исключение и программа завершится:

Функция exit и аналогичная ей quit созданы для удобства работы в интерактивном режиме и их не рекомендуется использовать внутри скриптов:

They are useful for the interactive interpreter shell and should not be used in programs.

По факту они также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:

Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.

Есть также дополнительный метод для немедленного завершения программы: os._exit . У него довольно специфическая область применения, и там же есть замечание:

The standard way to exit is sys.exit(n)

Т.е. здесь даётся подтверждение того, что стандартный способ завершения программы — это вызов sys.exit .

Функция os.abort , упомянутая вами, использует механизм сигналов процессу. Конкретно при вызове этой функции будет передан сигнал SIGABRT , что в linux приведёт к завершению программы и созданию дампа памяти процесса. Подобное завершение рассматривается операционной системой как аварийное, поэтому не стоит использовать его для безаварийного завершения приложения.

По второй части вопроса. В Python есть развитая система контекстных менеджеров: классов, которые умеют работать с оператором with . Самое частое использование этого механизма встречается, вероятно, с файлами.

Читайте также:  Как в дип ио играть с другом

Этот код откроет файл, напечатает его содержимое на экран и закроет файл автоматически, даже если возникнет исключение при его печати.

Для классов, которые не приспособлены для работы с with есть функция closing в библиотеке contextlib . Из документации:

is equivalent to this:

Вот небольшой пример работы этой функции:

Теперь небольшое отступление о том, почему стоит использовать конструкцию with .

Известно, что программа завершится от любого необработанного исключения, а не только от SystemExit . Таким образом, если в вашем коде используются какие-то ресурсы, которые требуется правильным образом закрывать перед завершением работы, нужно оборачивать работу с ними в блоки try . finally . .

Однако, при использовании конструкции with это оборачивание происходит автоматически, и все ресурсы закрываются корректно.

Так как выход из программы — это всего лишь брошенное исключение, то и в случае использования функции sys.exit закрытие открытых в операторе with ресурсов произойдёт корректно:

Вы можете писать также и свои классы, предоставляющие ресурсы или классы, оборачивающие другие, которые нужно уметь закрывать автоматически. Для этого используются методы __enter__ и __exit__ .

Зарегистрируйтесь, чтоб продолжить пользоваться всеми функциями Techfeed

Популярные теги

У кого-нибудь есть пример скрипта, который может надежно работать в IE / Firefox, чтобы определить, способен ли браузер отображать встроенный флэш-контент. Я говорю надежно, потому что знаю, что это невозможно в 100% случаев.

Ответы на вопрос ( 15 )

Популярные вопросы

Установите свою любимую песню в качестве мелодии звонка для Iphone

Проблема c импортом классов в WebDriverIo js

МОИ КНОПКИ ОТ ВАС НЕ ШАРЯТ, ХОТЯ ГОД НАЗАД ВСЕ БЫЛО НОРМАЛЬНО?

Добрый день, сразу прошу прощение за не точно сформулированный вопрос.
В программировани буквально несколько дней, не могу разобраться как написать
к этой программе возможность выхода(завершения) по слову exit/quit.
Искал на многих ресурсах, но так и не понял как это сделать.Буду благодарен за
любую подсказку 🙂

Читайте также:  Залегли маслосъемные кольца что делать бензин

Вопрос исчерпан, не хватало from sys import exit as sys_exit

Ссылка на основную публикацию
Nvidia corporation downloader можно ли удалять
При всей своей полезности, NVIDIA GeForce Experience далеко не всем пользователям приходится по нутру. На это у каждого есть свои...
Lenovo yoga 330 11igm обзор
Несмотря на некоторые недостатки дисплея, например, недостаточную шахматную контрастность, маленький и долгоиграющий ноутбук Lenovo Yoga 330-11IGM может стать идеальным дорожным...
Lenovo как зайти в boot menu
Boot Menu (меню загрузки) можно вызывать при включении на большинстве ноутбуков и компьютеров, данное меню является опцией BIOS или UEFI...
Nvidia cuvid или dxva2
Большинство современных видеокарт, как встроенных в процессоры, так и дискретных, поддерживает технологию аппаратного декодирования видео. Это означает, что видеокарта способна...
Adblock detector