Explain Codes LogoExplain Codes Logo

How do I terminate a script?

python
functions
best-practices
soft-skills
Nikita BarsukovbyNikita Barsukov·Sep 9, 2024
TLDR

For a swift and immediate Python script termination, use exit(). However, when in need of a smoothly executed and clean script termination, particularly in production code or complex project, always opt for sys.exit(), after importing the sys module:

import sys sys.exit() # "I'm outta here!"

Proper exit strategies: sys.exit() vs. os._exit()

Standard approach: sys.exit()

sys.exit() is your go-to function to terminate a Python script. When called, it raises a SystemExit exception, leading to the initiation of cleanup before the script ends. Note that it only terminates the thread from which it was called. When other non-daemon threads are still running, only the main thread's termination results in the script's complete shutdown.

Instant shutdown: os._exit()

If you need an immediate, no-questions-asked termination of the script, invoke the os._exit() function. It doesn't call any cleanup handlers or flush stdio buffers. This function is best suited in child processes conceived from a fork() system call.

Exit codes: Silent storytellers

Pass a status code to sys.exit(), and it'll infer the reason behind the script's termination: 0 stands for a successful termination, while any non-zero values represent different kinds of errors. You can also pass custom messages, which will be displayed to stderr.

For interactive sessions: quit() or exit()

When running interactive sessions, for example, during prototyping or debugging in IDLE or Jupyter Notebook, quit() and exit() are your best bets for an abrupt script stop.

Bidding adieu with an exception: raise SystemExit

To stop the script instantaneously, raise SystemExit—it's akin to firing the sys.exit(). You can also pass a message to it, using raise SystemExit('custom_msg'), for a personalized termination message:

raise SystemExit('Houston, we have a problem') # Space-themed joke in line with Python's philosophy 😄

Closing thoughts: tidbits on script termination

Script termination in a multi-threading environment

In multi-threaded applications, remember sys.exit() won't kill running threads, except if they're daemon threads, which stop instantly as the application ends.

The role of finally blocks in script termination

When your code incorporates finally blocks for cleanup operations (like closing files or network connections), sys.exit() assists by making sure they run before the script ends.

Proper script termination in execfile()

For those using execfile(), which no longer exists in Python 3.x, opt for non-abrupt termination methods for a seamless script ending.

When to avoid os._exit()

Although os._exit() ensures quick termination, use it sparingly. It's a choice of last resort requiring you to skip cleanup steps, affecting the Python runtime environment.