Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I need to invoke method f . If it raises an IOError , I need to invoke it again (retry), and do it at most three times. I need to log any other exceptions, and I need to log all retries.

the code below does this, but it looks ugly. please help me make it elegant and pythonic. I am using Python 2.7.

thanks!

count = 3
while count > 0:
    except IOError:
        count -= 1
        if count > 0:
            print 'retry'
        continue
    except Exception as x:
        print x
    break
                You might want to re-raise the IOError on the last try though, so that the program ends with an actual exception (and without a note about a retry that doesn’t happen).
– poke
                Nov 9, 2011 at 17:38
                thanks. "else" clause is useful, but I need to log all exceptions, so I have to catch the other ones too. yes, I cold raise them again after I have logged them.
– akonsu
                Nov 9, 2011 at 17:44
                @akonsu If you want to catch all exceptions, just leave out the IOError or replace it with BaseException.
– phihag
                Nov 9, 2011 at 17:48
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.