Restarting a program after exception

前端 未结 4 751
执念已碎
执念已碎 2020-12-28 08:45

I have a program that queries an API every few seconds. Each response triggers a few functions which themselves make some calls to websites and such -- calls that I don\'t w

4条回答
  •  感情败类
    2020-12-28 09:31

    To restart anything, just use a while loop outside the try. For example:

    def foo():
        while True:
            try:
                foo2()
            except:
                pass
            else:
                break
    

    And if you want to pass the exception up the chain, just do this in the outer function instead of the inner function:

    def queryRepeatedly():
        while True:
            while True:
                try:
                    foo()
                    bar()
                    baz()
                except:
                    pass
                else:
                    break
            time.sleep(15)
    
    def foo():
        foo2()
    

    All that indentation is a little hard to read, but it's easy to refactor this:

    def queryAttempt()
        foo()
        bar()
        baz()
    
    def queryOnce():
        while True:
            try:
                queryAttempt()
            except:
                pass
            else:
                break
    
    def queryRepeatedly():
        while True:
            queryOnce()
            time.sleep(15)
    

    But if you think about it, you can also merge the two while loops into one. The use of continue may be a bit confusing, but see if you like it better:

    def queryRepeatedly():
        while True:
            try:
                foo()
                bar()
                baz()
            except:
                continue()
            time.sleep(15)
    

提交回复
热议问题