Остановка выполнения скрипта Python: команда и функция quit()
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для мгновенного прекращения выполнения скрипта Python используйте функцию sys.exit()
из модуля sys
, вызывающую исключение SystemExit
. Для более решительного закрытия, не предполагающего освобождения ресурсов, применяют функцию os._exit()
. Это считается крайней мерой. Вот пример использования sys.exit()
:
import sys
# Пришло время прервать выполнение
sys.exit()
В большинстве случаев предпочтительнее использовать именно sys.exit()
, чтобы обеспечить корректное завершение работы скрипта.
Стандартные методы остановки скрипта с использованием sys.exit()
Корректное завершение с использованием sys.exit()
Применяйте sys.exit()
для стандартного завершения программы, когда все процессы завершены или произошла критическая ошибка. Завершение с конкретным кодом позволяет передать информацию о статусе завершения: успешно (0) или с ошибкой (любое ненулевое значение):
import sys
# Миссия выполнена, можно отметить это 🍸
sys.exit(0)
# Возникли проблемы! Срочно нужны изменения.
sys.exit(1)
Использование SystemExit
для осознанного завершения
Ещё одним способом, позволяющим остановить скрипт, является вызов исключения SystemExit
с использованием выражения raise SystemExit(0)
:
# Я ухожу!
raise SystemExit(0)
Непредвиденное завершение с exit()
и quit()
Функции exit()
и quit()
были созданы для интерактивного использования. Их иногда можно встретить и в скриптах, однако их применение в продакшен-коде не рекомендуется:
# Я ухожу... как настоящий победитель 😎
exit()
Остановка скрипта с выводом ошибки при ненулевом значении в sys.exit()
Завершение работы с ненулевым значением аргумента в функции sys.exit()
указывает на наличие ошибки и немедленно прерывает выполнение скрипта:
import sys
# Возникли проблемы, приказ предусматривает остановку!
sys.exit('Сообщение об ошибке')
Визуализация
Приставьте работу скрипта Python как путешествие на поезде (🚂
):
🚂💨 – - – 🛤 -> 🛤 -> 🛤 -> 🛑 -> 🏁
Останавливаем поезд (🛑
), и его движение прекращается следующим образом:
import sys
sys.exit() # Стоп! Забыл своего плюшевого мишку! 👨👦👦🧸
Тут же поезд останавливается, и выполнение скрипта прерывается:
🚂💨 – - – 🛤 -> 🛤 -> 🚫
Конец пути: 🏁
Продуманная работа с исключениями
Не перехватывайте SystemExit
, если в этом нет необходимости
Не перехватывайте исключение SystemExit
, если вы не планируете его специально обработать, например, для логирования или выполнения завершающего освобождения ресурсов. Непреднамеренный перехват этого исключения может помешать правильному завершению работы скрипта:
try:
# Пора уходить, меня ждут 🛸
sys.exit()
except SystemExit:
# Поймал исключение!
print("Исключение SystemExit перехвачено")
Корректная обработка исключений
Используйте блоки try
/except
разумно, перехватывайте только те исключения, с которыми вы уверенно умеете работать, и позволяйте SystemExit
и KeyboardInterrupt
выполнять свою задачу:
try:
# Экспериментируем с делением на ноль, почему бы и нет? 😅
except Exception as e:
# Ошибка выявлена, но это не страшно 🤦
finally:
# В любом случае, мы всё справили! 🧹
Стратегии завершения работы в различных ситуациях
Мгновенное завершение с помощью os._exit()
В тех ситуациях, когда процесс освобождения ресурсов не требуется или может быть вредоносным, os._exit()
позволит избежать его и моментально завершит работу программы. Данная функция – это своего рода спасательная шлюпка, позволяющая сохранить ваши данные при быстром уходе:
import os
os._exit(0) # Всем до свидания! 🏃♂️💨
Завершение долгосрочных операций с помощью сигналов
Для длительных операций, которые требуют возможности прерывания извне, идеально подойдут сигналы, обрабатывающиеся с помощью Python-модуля signal
:
import signal
import sys
def graceful_exit(signum, frame):
sys.exit(0)
# Готовимся к взрыву! 💣💥
signal.signal(signal.SIGTERM, graceful_exit)
Завершение работы скрипта по таймеру
Используйте sched
или threading.Timer
для завершения работы программы по истечении заданного времени:
import threading
import sys
def stop_script():
sys.exit(0)
# Время вышло, кукушка прокукала ⏰
timer = threading.Timer(10, stop_script)
timer.start()
Полезные материалы
- sys — Системно-специфические параметры и функции — Документация Python 3.12.2 — Официальная документация Python по
sys.exit()
. - python – Как остановить выполнение скрипта? – Stack Overflow — Обсуждение на Stack Overflow способов прекращения работы скриптов.
- execution – Как остановить выполнение скрипта на Python? – Stack Overflow — Разговоры на Stack Overflow о прерывании выполнения скриптов на Python.
- Python | метод os._exit() – GeeksforGeeks — Замечательное руководство от GeeksforGeeks о
os._exit()
. - Обработка исключений в Python (с примерами) — Глубокий анализ исключений в Python.
- signal — обработка асинхронных событий — Документация Python 3.12.2 — Подробности о модуле
signal
в документации Python. - Try и Except в Python – PythonForBeginners.com — Всё, что нужно знать о блоках
try
иexcept
в Python.