- Завершение программы в Python
- 2 ответа 2
- 4 Способа выхода из программы с помощью функции Python Exit
- Работа с функциями выхода Python
- 1. Выход Python()
- 2. Python exit с помощью quit()
- 3. Функция Sys.exit() в Python
- 4. Функция os._exit В Python
- Разница между выходом(0) и выходом(1)
- Должен Читать:
- Вывод
- Читайте ещё по теме:
Завершение программы в Python
Однако, там не было объяснения какой метод лучше. Какой метод является наиболее «безаварийным»? И заодно: есть ли в Python понятие Autocloseable объектов? Если я сделаю ранее завершение программы, нужно ли мне будет закрывать файлы и т.д.?
2 ответа 2
Короткий ответ:
Лучше использовать sys.exit()
Механизм завершения процесса в Python реализован через бросание исключения SystemExit , таким образом можно просто создать подобное исключение и программа завершится:
raise SystemExit # или даже передать число -- код ошибки завершения программы raise SystemExit(1)
Функция exit и аналогичная ей quit созданы для удобства работы в интерактивном режиме и их не рекомендуется использовать внутри скриптов:
They are useful for the interactive interpreter shell and should not be used in programs.
По факту они также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:
>>> quit Use quit() or Ctrl-D (i.e. EOF) to exit >>> exit Use exit() or Ctrl-D (i.e. EOF) to exit
Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.
Есть также дополнительный метод для немедленного завершения программы: os._exit . У него довольно специфическая область применения, и там же есть замечание:
The standard way to exit is sys.exit(n)
Т.е. здесь даётся подтверждение того, что стандартный способ завершения программы — это вызов sys.exit .
Функция os.abort , упомянутая вами, использует механизм сигналов процессу. Конкретно при вызове этой функции будет передан сигнал SIGABRT , что в linux приведёт к завершению программы и созданию дампа памяти процесса. Подобное завершение рассматривается операционной системой как аварийное, поэтому не стоит использовать его для безаварийного завершения приложения.
По второй части вопроса. В Python есть развитая система контекстных менеджеров: классов, которые умеют работать с оператором with . Самое частое использование этого механизма встречается, вероятно, с файлами.
with open('filename') as my_file: print(my_file.read())
Этот код откроет файл, напечатает его содержимое на экран и закроет файл автоматически, даже если возникнет исключение при его печати.
Для классов, которые не приспособлены для работы с with есть функция closing в библиотеке contextlib . Из документации:
f = .open() try: finally: f.close()
Вот небольшой пример работы этой функции:
import contextlib class Closeable: def close(self): print('closed') with contextlib.closing(Closeable()): pass # печатает closed
Теперь небольшое отступление о том, почему стоит использовать конструкцию with .
Известно, что программа завершится от любого необработанного исключения, а не только от SystemExit . Таким образом, если в вашем коде используются какие-то ресурсы, которые требуется правильным образом закрывать перед завершением работы, нужно оборачивать работу с ними в блоки try . finally . .
Однако, при использовании конструкции with это оборачивание происходит автоматически, и все ресурсы закрываются корректно.
Так как выход из программы — это всего лишь брошенное исключение, то и в случае использования функции sys.exit закрытие открытых в операторе with ресурсов произойдёт корректно:
with contextlib.closing(Closeable()): sys.exit() # напечатает closed
Вы можете писать также и свои классы, предоставляющие ресурсы или классы, оборачивающие другие, которые нужно уметь закрывать автоматически. Для этого используются методы __enter__ и __exit__ .
- Похожий вопрос с англоязычного StackOverflow
- Функции, добавляемые модулем site
- Документация по конструкции with
- Документация по функции closing
- Документация по исключению SystemExit
- Документация по функции os._exit
- Документация по функции sys.exit
- Документация по функции os.abort
- Описание системного сигнала SIGABRT
4 Способа выхода из программы с помощью функции Python Exit
Есть много случаев, когда мы хотим выйти из программы до того, как это сделает интерпретатор, и для этой цели у нас есть python exit function. Помимо exit у нас также есть некоторые функции, такие как quit (), sys.exit() и os._exit(). Давайте узнаем о каждом из их достоинств и недостатков.
Во время простого выполнения программы (без использования упомянутых выше функций), когда интерпретатор достигает конца программы/скрипта, он выходит из программы. Но когда мы используем такие функции, как выход и выход, он выходит автоматически в это время.
Работа с функциями выхода Python
Иногда нам нужно, чтобы программа остановилась до того, как интерпретатор достигнет конца сценария, например, если мы сталкиваемся с чем-то, что не требуется. Итак, давайте разберемся, какие функции можно использовать ниже 4 способами –
1. Выход Python()
Эта функция может быть реализована только тогда, когда site.py модуль есть (он поставляется с предустановленным Python), и именно поэтому его не следует использовать в производственной среде. Он должен использоваться только с переводчиком.
В фоновом режиме функция выхода python использует исключение SystemExit. Это означает, что когда интерпретатор сталкивается с exit (), он выдает исключение SystemExit. Кроме того, он не печатает трассировку стека, что означает, почему произошла ошибка.
Если мы выполним print(exit) –
Output- Use exit() or Ctrl-Z plus Return to exit
Ниже приведен код выхода из программы, если мы сталкиваемся с избирателем в возрасте до 18 лет.
ages=[19,45,12,78] for age in ages: if age < 18: print(age,"not allowed") exit() else: print(age,"allowed")
Output- 19 allowed 45 allowed 12 not allowed
Если мы запустим программу на python, то на выходе получим-
2. Python exit с помощью quit()
Эта функция работает точно так же, как exit(). Нет никакой разницы. Это делается для того, чтобы сделать язык более удобным для пользователя. Только подумай, ты же href=”https://en.wikipedia.org/wiki/Programmer”>новичок в языке python, какая функция, по вашему мнению, должна использоваться для выхода из программы? Выходите или уходите, верно? Это то, что делает Python простым в использовании языком. Как и функция python exit, функция python quit() не оставляет следов стека и не должна использоваться в реальной жизни. href=”https://en.wikipedia.org/wiki/Programmer”>новичок в языке python, какая функция, по вашему мнению, должна использоваться для выхода из программы? Выходите или уходите, верно? Это то, что делает Python простым в использовании языком. Как и функция python exit, функция python quit() не оставляет следов стека и не должна использоваться в реальной жизни.
Предположим, мы хотим выйти из программы, когда встречаем имя в списке меток-
marks=[78,89,92,"ashwini",56] for i in marks: if type(i) : print("Oops!! Encountered a non-int value:",i) quit()
Output- Oops!! Encountered a non-int value: ashwini
3. Функция Sys.exit() в Python
Эта функция полезна и может быть использована в реальном мире или производственной среде, потому что это функция модуля sys, доступного везде. Мы должны использовать эту функцию для управления терминалом, у которого есть большие файлы.
Output- Voting not allowed because the age is less than 18
4. Функция os._exit В Python
Эта функция вызывает функцию C (), которая немедленно завершает работу программы. Кроме того, это утверждение “никогда не может вернуться”.
Разница между выходом(0) и выходом(1)
Основное различие между exit(0) и exit(1) заключается в том, что exit(0) представляет успех при любых ошибках, а exit(1) представляет неудачу.
Должен Читать:
- Как преобразовать строку в нижний регистр в
- Как вычислить Квадратный корень
- Пользовательский ввод | Функция ввода () | Ввод с клавиатуры
- Лучшая книга для изучения Python
Вывод
Функция exit является полезной функцией, когда мы хотим выйти из нашей программы без интерпретатора, достигающего конца программы. Некоторые из используемых функций-это python exit function, quit(), sys.exit(), os._exit(). Мы должны использовать эти функции в соответствии с нашими потребностями.
Попробуйте запустить программы на вашей стороне и дайте мне знать, если у вас есть какие-либо вопросы.