3 способи завершити програму на Python

Корисні посилання

Вміння правильно завершувати програму є важливим навиком, що може знадобитися у різних ситуаціях. Наприклад, при розробці простої гри, ви можете захотіти вийти з програми за певного введення від користувача або при досягненні конкретної умови. Розглянемо відмінності між трьома способами завершення виконання програми Python.

1. Застосування quit() або exit()

Одним з найпростіших способів припинити роботу програми Python є використання вбудованих функцій, таких як quit() або exit(). Викликаючи quit() або exit(), ви безпосередньо завершуєте виконання програми.

Функції quit() та exit() виконують ідентичні дії, тому вибір між ними – це лише питання індивідуальних переваг.

Ось приклад використання функції quit() для завершення програми Python:

for num in range(10):
    if num == 9:
        quit()
    print(num)

Наведений фрагмент коду виведе на екран числа від 0 до 8. Коли значення змінної num досягне 9, програма завершиться. Функція quit() також може використовуватися для виходу з інтерактивного середовища Python (IDLE), де можна запускати скрипти в інтерактивному режимі.

Слід зазначити, що quit() і exit() залежать від модуля site, тому їх не рекомендується використовувати у виробничому середовищі. Для таких цілей краще використовувати наступний метод, sys.exit().

2. Використання sys.exit()

Коли у вашій програмі викликається sys.exit(), Python ініціює виняток SystemExit. Ця функція приймає необов’язковий аргумент, який визначає цілочисельний код виходу (за замовчуванням – 0). Ви також можете передати об’єкт, що призведе до коду виходу 1 та виведе текстове представлення об’єкта до стандартного потоку помилок.

import sys
for num in range(10):
    if num == 5:
        sys.exit("Вихід з програми")
    print(num)

Результат виконання цього коду буде наступним:

Подібно до quit() та exit(), sys.exit() також викликає виняток SystemExit. Це означає, що ви можете або викликати sys.exit(), або ініціювати SystemExit(). Обидва варіанти приймають необов’язковий аргумент.

Для кращого розуміння наведеного вище коду, варто ознайомитися з ключовими функціями Python.

3. Застосування os._exit()

Третім способом виходу з програми є спеціальна функція os._exit(). Цій функції також можна передати необов’язковий аргумент, що вказує на код статусу виходу. os._exit() походить з модуля os і негайно завершує процес, не виконуючи звичайні операції очищення, які відбуваються під час нормального завершення програми Python.

Оскільки ця функція завершує роботу без виконання звичайного очищення, її слід використовувати лише в особливих випадках. Згідно з документацією Python, добрим прикладом є дочірній процес після розгалуження (новий процес, створений за допомогою os.fork()).

Нижче наведено приклад використання os._exit() для завершення програми:

import os
import sys

def child_process():
    print("Запущено дочірній процес.")
    os._exit(0)

def main():
    print("Запущено головний процес.")

    try:
        pid = os.fork()

        if pid == 0:
            child_process()
        else:
            print(f"Головний процес продовжує роботу, PID дочірнього процесу: {pid}")
    except OSError as e:
        print(f"Помилка розгалуження: {e}")
        sys.exit(1)

    print("Головний процес завершив роботу.")

if __name__ == "__main__":
    main()

Результат виконання цього коду буде наступним:

Який метод використовувати для зупинки програми Python?

Python надає різноманітні способи завершення програм. Однак, більшість з них виконують схожі дії. Це спрощує вибір методу, коли вам потрібно додати функціональність виходу з програми під час вивчення Python.

Отже, sys.exit() повинен бути основним методом для завершення програми Python. Він ініціює виняток SystemExit з необов’язковим кодом виходу.

Функції quit() та exit() більше підходять для використання в інтерактивному середовищі Python REPL. Їх не варто використовувати у виробничих середовищах, оскільки вони залежать від модуля site, який не завжди може бути доступним. Функцію os._exit() варто використовувати рідко, зазвичай при роботі з кодом, що розгалужує процеси.