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