Завершение программ средствами модуля sys

zavershenie programm sredstvami modulya sys Системные инструменты параллельного выполнения

Например, программу можно завершить раньше обычного, вызвав функцию 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

Оцените статью
Секреты программирования
Добавить комментарий