Остановка выполнения скрипта Python: команда и функция quit()

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для мгновенного прекращения выполнения скрипта Python используйте функцию sys.exit() из модуля sys, вызывающую исключение SystemExit. Для более решительного закрытия, не предполагающего освобождения ресурсов, применяют функцию os._exit(). Это считается крайней мерой. Вот пример использования sys.exit():

Python
Скопировать код
import sys

# Пришло время прервать выполнение
sys.exit()

В большинстве случаев предпочтительнее использовать именно sys.exit(), чтобы обеспечить корректное завершение работы скрипта.

Кинга Идем в IT: пошаговый план для смены профессии

Стандартные методы остановки скрипта с использованием sys.exit()

Корректное завершение с использованием sys.exit()

Применяйте sys.exit() для стандартного завершения программы, когда все процессы завершены или произошла критическая ошибка. Завершение с конкретным кодом позволяет передать информацию о статусе завершения: успешно (0) или с ошибкой (любое ненулевое значение):

Python
Скопировать код
import sys

# Миссия выполнена, можно отметить это 🍸
sys.exit(0)

# Возникли проблемы! Срочно нужны изменения.
sys.exit(1)

Использование SystemExit для осознанного завершения

Ещё одним способом, позволяющим остановить скрипт, является вызов исключения SystemExit с использованием выражения raise SystemExit(0):

Python
Скопировать код
# Я ухожу!
raise SystemExit(0)

Непредвиденное завершение с exit() и quit()

Функции exit() и quit() были созданы для интерактивного использования. Их иногда можно встретить и в скриптах, однако их применение в продакшен-коде не рекомендуется:

Python
Скопировать код
# Я ухожу... как настоящий победитель 😎
exit()

Остановка скрипта с выводом ошибки при ненулевом значении в sys.exit()

Завершение работы с ненулевым значением аргумента в функции sys.exit() указывает на наличие ошибки и немедленно прерывает выполнение скрипта:

Python
Скопировать код
import sys

# Возникли проблемы, приказ предусматривает остановку!
sys.exit('Сообщение об ошибке')

Визуализация

Приставьте работу скрипта Python как путешествие на поезде (🚂):

Markdown
Скопировать код
🚂💨 – - – 🛤 -> 🛤 -> 🛤 -> 🛑 -> 🏁

Останавливаем поезд (🛑), и его движение прекращается следующим образом:

Python
Скопировать код
import sys
sys.exit()  # Стоп! Забыл своего плюшевого мишку! 👨‍👦‍👦🧸

Тут же поезд останавливается, и выполнение скрипта прерывается:

Markdown
Скопировать код
🚂💨 – - – 🛤 -> 🛤 -> 🚫
Конец пути: 🏁

Продуманная работа с исключениями

Не перехватывайте SystemExit, если в этом нет необходимости

Не перехватывайте исключение SystemExit, если вы не планируете его специально обработать, например, для логирования или выполнения завершающего освобождения ресурсов. Непреднамеренный перехват этого исключения может помешать правильному завершению работы скрипта:

Python
Скопировать код
try:
    # Пора уходить, меня ждут 🛸
    sys.exit()
except SystemExit:
    # Поймал исключение!
    print("Исключение SystemExit перехвачено")

Корректная обработка исключений

Используйте блоки try/except разумно, перехватывайте только те исключения, с которыми вы уверенно умеете работать, и позволяйте SystemExit и KeyboardInterrupt выполнять свою задачу:

Python
Скопировать код
try:
    # Экспериментируем с делением на ноль, почему бы и нет? 😅 
except Exception as e:
    # Ошибка выявлена, но это не страшно 🤦
finally:
    # В любом случае, мы всё справили! 🧹

Стратегии завершения работы в различных ситуациях

Мгновенное завершение с помощью os._exit()

В тех ситуациях, когда процесс освобождения ресурсов не требуется или может быть вредоносным, os._exit() позволит избежать его и моментально завершит работу программы. Данная функция – это своего рода спасательная шлюпка, позволяющая сохранить ваши данные при быстром уходе:

Python
Скопировать код
import os

os._exit(0)  # Всем до свидания! 🏃‍♂️💨

Завершение долгосрочных операций с помощью сигналов

Для длительных операций, которые требуют возможности прерывания извне, идеально подойдут сигналы, обрабатывающиеся с помощью Python-модуля signal:

Python
Скопировать код
import signal
import sys

def graceful_exit(signum, frame):
    sys.exit(0)

# Готовимся к взрыву! 💣💥
signal.signal(signal.SIGTERM, graceful_exit)

Завершение работы скрипта по таймеру

Используйте sched или threading.Timer для завершения работы программы по истечении заданного времени:

Python
Скопировать код
import threading
import sys

def stop_script():
    sys.exit(0)

# Время вышло, кукушка прокукала ⏰
timer = threading.Timer(10, stop_script)
timer.start()

Полезные материалы

  1. sys — Системно-специфические параметры и функции — Документация Python 3.12.2 — Официальная документация Python по sys.exit().
  2. python – Как остановить выполнение скрипта? – Stack Overflow — Обсуждение на Stack Overflow способов прекращения работы скриптов.
  3. execution – Как остановить выполнение скрипта на Python? – Stack Overflow — Разговоры на Stack Overflow о прерывании выполнения скриптов на Python.
  4. Python | метод os._exit() – GeeksforGeeks — Замечательное руководство от GeeksforGeeks о os._exit().
  5. Обработка исключений в Python (с примерами) — Глубокий анализ исключений в Python.
  6. signal — обработка асинхронных событий — Документация Python 3.12.2 — Подробности о модуле signal в документации Python.
  7. Try и Except в Python – PythonForBeginners.com — Всё, что нужно знать о блоках try и except в Python.