Можно выйти из Python и другими способами. Например, в дочернем процессе в Unix обычно вызывается функция os._exit, а не sys.exit. Потоки можно завершать с помощью функции _thread.exit, а приложения с графическим интерфейсом на основе tkinter часто завершаются с помощью метода Tk().quit (). С модулем tkinter мы познакомимся далее в этой книге, а сейчас поближе рассмотрим инструменты завершения программ в модуле os.
При вызове функции os._exit вызывающий процесс завершается сразу, не возбуждая исключения, которое можно перехватить и игнорировать. Фактически при таком завершении процесс прекращает работу, не выталкивая буферы потоков вывода и не вызывая обработчики, выполняющие заключительные операции (которые можно определить с помощью модуля atexit из стандартной библиотеки), поэтому в общем случае данная функция должна использоваться только дочерними процессами, когда не требуется выполнения действий по завершению всей программы. Пример 5.16 иллюстрирует основы использования этой функции.
Пример 5.16. PP4E\System\Exits\testexit_os.py
def outahere(): import os print(‘Bye os world’) os._exit(99) print(‘Never reached’)
if __name__ == ‘__main__’: outahere()
В отличие от sys.exit, функция os._exit неуязвима для инструкций обработки исключений try/except и try/finally:
C:\…\PP4E\System\Exits> python testexit_os.py
Bye os world
C:\…\PP4E\System\Exits> python
>>> from testexit_os import outahere
>>> try:
… outahere()
… except:
… print(‘Ignored’)
…
Bye os world # завершение процесса интерактивного сеанса
C:\…\PP4E\System\Exits> python
>>> from testexit_os import outahere
>>> try:
… outahere()
… finally:
… print(‘Cleanup’)
…
Bye os world # ditto
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011