Program terminated Traceback (most recent call last): File "Z:\Directory\testdieprogram.py", line 12, in
main() File "Z:\Directory\testdieprogram.py", line 8, in main
sys.exit() SystemExit
Edit
The point being that the program ends smoothly and peacefully, rather than "I'VE STOPPED !!!!"
I was dissatisfied that (on repl.it at least,) none of these completely shut down the interpreter; it could always run code in the repl, even after exit, etc. the only way I could think of that always stops the interpreter from proceeding is by simulating a system exit by sleeping.
import time
def forceStop(errmsg="emergency stop deployed. :("):
print(f"\033[31m{errmsg}\033[0m")
time.sleep(10000000)
Exit from Python. This is implemented by raising the
SystemExit exception, so cleanup actions specified by finally clauses
of try statements are honored, and it is possible to intercept the
exit attempt at an outer level.
The optional argument arg can be an integer giving the exit status
(defaulting to zero), or another type of object. If it is an integer,
zero is considered “successful termination” and any nonzero value is
considered “abnormal termination” by shells and the like. Most systems
require it to be in the range 0-127, and produce undefined results
otherwise. Some systems have a convention for assigning specific
meanings to specific exit codes, but these are generally
underdeveloped; Unix programs generally use 2 for command line syntax
errors and 1 for all other kind of errors. If another type of object
is passed, None is equivalent to passing zero, and any other object is
printed to stderr and results in an exit code of 1. In particular,
sys.exit("some error message") is a quick way to exit a program when
an error occurs.
Since exit() ultimately “only” raises an exception, it will only exit
the process when called from the main thread, and the exception is not
intercepted.
Note that this is the 'nice' way to exit. @glyphtwistedmatrix below points out that if you want a 'hard exit', you can use os._exit(errorcode), though it's likely os-specific to some extent (it might not take an errorcode under windows, for example), and it definitely is less friendly since it doesn't let the interpreter do any cleanup before the process dies.
Keep in mind that sys.exit(), exit(), quit(), and os._exit(0)kill the Python interpreter. Therefore, if it appears in a script called from another script by execfile(), it stops execution of both scripts.
I'm a total novice but surely this is cleaner and more controlled
...
than
...
Edit
The point being that the program ends smoothly and peacefully, rather than "I'VE STOPPED !!!!"
There are a few standard ways to do it:
I was dissatisfied that (on
repl.it
at least,) none of these completely shut down the interpreter; it could always run code in the repl, even afterexit
, etc. the only way I could think of that always stops the interpreter from proceeding is by simulating a system exit by sleeping.This is obviously not recommended.
details from the
sys
module documentation:Note that this is the 'nice' way to exit. @glyphtwistedmatrix below points out that if you want a 'hard exit', you can use os._exit(errorcode), though it's likely os-specific to some extent (it might not take an errorcode under windows, for example), and it definitely is less friendly since it doesn't let the interpreter do any cleanup before the process dies.
As a parameter you can pass an exit code, which will be returned to OS. Default is 0.
Another way is:
You can also use simply
exit()
.Keep in mind that
sys.exit()
,exit()
,quit()
, andos._exit(0)
kill the Python interpreter. Therefore, if it appears in a script called from another script byexecfile()
, it stops execution of both scripts.See "Stop execution of a script called with execfile" to avoid this.