[Tutor] Use flag to exit?

Steven D'Aprano steve at pearwood.info
Thu Jun 24 13:54:23 CEST 2010


On Thu, 24 Jun 2010 08:51:26 pm Richard D. Moores wrote:

> How about using sys.exit() instead?

sys.exit() is almost always evil. Here's the problem:

One day, you find a nice library that has some function you need. 
Perhaps it's even a library you wrote yourself:


from library import print_next_prime
print_next_prime(5)

=> prints 7


And it works fine. So you decide to extend your program:


from library import print_next_prime
print_next_prime(5)
print_next_prime(13)

=> prints 7


And mysteriously it stops working. The second function call never 
happens, only the first. What's going on?

Eventually you work out that the print_next_prime function needlessly 
calls sys.exit. This being Python, you can fix it:


from library import print_next_prime

def print_next_prime2(n):
    try:
        print_next_prime(n)
    except SystemExit:
        pass

print_next_prime2(5)
print_next_prime2(13)


so it's not the end of the world, but you shouldn't have to work around 
the poor design of the function in the first place.

sys.exit is almost never needed. I'm yet to find a program that includes 
it where the program wouldn't be simpler to use, more flexible, more 
friendly, and generally more useful, without it.

One (rare) exception is, when it is part of the user interface, not the 
backend. For instance, in a GUI application, you might link the Quit 
menu command to sys.exit.

In Python, you rarely need to explicitly exit because your code will 
exit when it reaches the end of the file, or on an un-caught exception.



-- 
Steven D'Aprano


More information about the Tutor mailing list