Terminating a Python script

2020-01-22 11:36发布

I am aware of the die() command in PHP which stops a script early.

How can I do this in Python?

10条回答
狗以群分
2楼-- · 2020-01-22 12:16

I'm a total novice but surely this is cleaner and more controlled

def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        return
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

Program terminated

than

import sys
def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        sys.exit()
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

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 !!!!"

查看更多
疯言疯语
3楼-- · 2020-01-22 12:17

There are a few standard ways to do it:

import sys
sys.exit(404)

# or...
exit(404)

# or...
quit(404)

# or...
raise SystemExit(404)

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)

This is obviously not recommended.

查看更多
Melony?
4楼-- · 2020-01-22 12:20
import sys
sys.exit()

details from the sys module documentation:

sys.exit([arg])

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.

查看更多
Deceive 欺骗
5楼-- · 2020-01-22 12:23
from sys import exit
exit()

As a parameter you can pass an exit code, which will be returned to OS. Default is 0.

查看更多
Viruses.
6楼-- · 2020-01-22 12:30

Another way is:

raise SystemExit
查看更多
我想做一个坏孩纸
7楼-- · 2020-01-22 12:30

You can also use simply exit().

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.

See "Stop execution of a script called with execfile" to avoid this.

查看更多
登录 后发表回答