[Tutor] How to exit program without sys.exit()

bob gailer bgailer at gmail.com
Thu Dec 18 20:31:05 CET 2008


David wrote:
> Hi,
> I make these silly programs to learn from examples I find on the list. 
> I put a couple together just to practice. I have heard it is not a 
> good idea to use sys.exit() but I can not figure out how to do it. 
> Also any and all comments are welcome. Thanks

Others have made valuable comments. I add:

It is better to use a while loop rather than recursive function calls. 
The logic is a lot easier to follow, and you won't run into the 
recursive depth limit. Also restrict try blocks to just the statement 
likely to raise the error you  are expecting.

def getinfo():
    while True:
        answer = yesno("Enter y to continue, n to exit: y/n >> ")
        if answer == "y":
            getnumber()
        else:
           break

def getnumber():
    num = 0
    while True:
        try:
            num = int(raw_input("Enter a number between 25 and 75: "))
        except ValueError:
            print "Please Enter a number!"
        if 25 < num < 75:
            print "WOW you are smart ", sayit()
            break           

There are a lot more recursive calls that I will not try to "fix". I 
hope you get the idea.

In fact I'd start out with no functions at all - just one program in a 
loop. See what you can accomplish that way, then add functions only as 
needed.
>
> #!/usr/bin/python
> import sys
> _count = 0
>
> def getinfo():
>     answer = yesno("Enter y to continue, n to exit: y/n >> ")
>     if answer == "y":
>         getnumber()
>     else:
>         sys.exit()
>
> def counter():
>     global _count
>     _count += 1
>     return _count
>
> def yesno(question):
>     responce = None
>     while responce not in ("y", "n"):
>         responce = raw_input(question).lower()
>     return responce
>
> def getnumber():
>     try:
>         num = int(raw_input("Enter a number between 25 and 75: "))
>         if 25 < num < 75:
>             print "WOW you are smart ", sayit()
>     except ValueError:
>         print "Please Enter a number!", getnumber()
>
>
> def sayit():
>     print "Your total correct answers is", counter()
>     again()
>
>
> def again():
>     onemore = raw_input("Again? y/n >> " )
>     if onemore.lower() == "y":
>         getnumber()
>     elif onemore.lower() == "n":
>         getinfo()
>     else:
>         sys.exit
>
>
> def main():
>     getinfo()
>
> if __name__=="__main__":
>     main()
>
>
>


-- 
Bob Gailer
Chapel Hill NC 
919-636-4239



More information about the Tutor mailing list