Feb-24-2021, 05:20 PM
To exit a program without an error traceback you need to write a program that doesn't raise an exception. Or if it does raise an exception, provide an exception handler (as per Larz60+).
When I run your program like this:
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.
Changed in version 3.6: If an error occurs in the cleanup after the Python interpreter has caught SystemExit (such as an error flushing buffered data in the standard streams), the exit status is changed to 120.
My guess is there is something catching the SystemExit exception and generating the messages you are seeing. What are you using for development? I am running Python 3.8.2 on Windows 10. I would stop using sys.exit() (I never use it) and find a better way to handle the problem.
By the way, ou can write your comparison:
When I run your program like this:
import sys def sum_two(a,b): if type(a) != int or type(b) != int: print('a and b must both be integers.') sys.exit() if a+b > 15 and a+b < 20: sum = 20 else: sum = a+b return sum sum_two(3.5, 6)I do not get any mention of using exit or quit. I get this:
Output:a and b must both be integers.
From the docs: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.
Changed in version 3.6: If an error occurs in the cleanup after the Python interpreter has caught SystemExit (such as an error flushing buffered data in the standard streams), the exit status is changed to 120.
My guess is there is something catching the SystemExit exception and generating the messages you are seeing. What are you using for development? I am running Python 3.8.2 on Windows 10. I would stop using sys.exit() (I never use it) and find a better way to handle the problem.
By the way, ou can write your comparison:
if a+b > 15 and a+b < 20: sum = 20like this:
if 15 < a+b < 20: sum = 20And though this is allowed, all style guidelines say you should never use it;
else: sum = a+b