有没有更好的方法可以在python中多次尝试函数?

有没有更好的方法可以在python中多次尝试函数?,python,try-catch,Python,Try Catch,当发现这样的异常时,我想多次执行测试函数 try: test() except: try: test() except: try: test() except Exception,e: logger.info(e) 当我请求一个url并得到url响应时,这种情况将发生 因为当您只请求一次时,目标w

当发现这样的异常时,我想多次执行
测试
函数

    try:
        test()
    except:
        try:
            test()
        except:
            try:
                test()
            except Exception,e:
                logger.info(e)
当我请求一个url并得到url响应时,这种情况将发生
因为当您只请求一次时,目标web服务器可能会响应一些错误数据,
要做到这一点需要这么多单词,而不是pythonic实现
有什么python风格可以做到这一点吗?
试试这个:

for i in xrange(3):
    try:
        test()
    except Exception, e:
        if i == 3:
           # handle exception
           # ...

请查看上的Python文档。

切勿使用bare exception,始终显式声明异常类型。@utdemir的可能重复项谢谢您指出这一点我总是忘记它我只想在发现异常时执行测试重复。仅当发生异常时,才会在Constantinius的答案上进行循环改进,在不捕获迭代计数时(使用
\uuu
),但您可以通过使用
xrange
range
来提高效率(尽管对于如此小的规模来说这并不重要)
实际上会实例化一个实际的列表,而不是一个迭代器,我不知道Python是否真的对它进行了优化,如果它注意到你没有将它分配给任何东西,那么它会执行test()五次,不管怎样?@timger,它会尝试执行test()五次,如果每次test()都失败,则执行else子句。但是,如果test()没有引发错误,它就会中断循环,跳过else部分并继续执行。@hircus,在Python 3中,range返回一个iterable,就像Python2中的xrange一样,所以我通常只使用range。Python没有对其进行优化,\没有任何特殊意义,它只是一个变量名。@utdemir最后一个“else”不能用“for”编译
while True:
    try:
        test()
        break
    except Exception, e:
        logger.info(e)
for _ in range(5):
    try:
        test()
    except SomeError:
        pass
    else:
        break
else:
    #All tries failed, do something.
    logger.info(...)
for i in range(3):
    try:
        test()
    except Exception, e:
        if i==2:
            logger.info(e)