在Python中处理超时异常

时间:2016-09-16 13:43:05

标签: python exception timeout handle praw

我正在寻找一种方法来处理使用PRAW(Python)的Reddit bot的超时异常。它每天至少超时一次,并且它有一个变量编码,因此我必须更新变量然后再次手动运行bot。我正在寻找一种自动处理这些异常的方法。我看了尝试:除了:,但我担心在time.sleep(10)之后添加一个断点会完全停止循环。无论是否超时,我希望它继续运行循环。下面是一段代码示例。

def run_bot():
   # Arbitrary Bot Code Here

   # This is at the bottom of the code, and it runs the above arbitrary code every 10 seconds
while True:
    try:
        run_bot()
        time.sleep(10)
    except:
        # Don't know what goes here

2 个答案:

答案 0 :(得分:2)

这取决于发生超时时您想要做什么。

你可以让pass无所事事并继续循环。

try:
    run_bot()
except:
    pass

在您的情况下,最好将其明确写为

try:
    run_bot()
except:
    continue

但您也可以在except子句中添加一些日志记录

try:
    run_bot()
except e:
    print 'Loading failed due to Timeout'
    print e

要确保循环始终处于休眠状态,您可以执行以下操作:

nr_of_comments = 0

def run_bot():
    # do stuff
    nr_of_comments =+ 1

while True:
    sleep(10)
    try:
        run_bot()
    except e:
        continue

答案 1 :(得分:1)

最后将睡眠移到最后会解决你的问题,我猜。无论是否发生异常,finally块都会运行。

def run_bot():
   # Arbitrary Bot Code Here

   # This is at the bottom of the code, and it runs the above arbitrary code every 10 seconds
while True:
    try:
        run_bot()
    except:
        from traceback import format_exc
        print "Exception happened:\n%s" % (format_exc())
    finally:
        time.sleep(10)