在Python中处理超时异常

在Python中处理超时异常,python,exception,timeout,handle,praw,Python,Exception,Timeout,Handle,Praw,我正在为我的Reddit机器人寻找一种处理超时异常的方法,它使用PRAW(Python)。它每天至少超时一次,并且它有一个编码的变量,所以我必须更新该变量,然后再次手动运行bot。我正在寻找一种自动处理这些异常的方法。我查看了try:和except:,但我担心在time.sleep(10)之后添加一个断点会完全停止循环。我希望它继续运行循环,不管它是否超时。下面是一个代码示例 def run_bot(): # Arbitrary Bot Code Here # This is at

我正在为我的Reddit机器人寻找一种处理超时异常的方法,它使用PRAW(Python)。它每天至少超时一次,并且它有一个编码的变量,所以我必须更新该变量,然后再次手动运行bot。我正在寻找一种自动处理这些异常的方法。我查看了try:和except:,但我担心在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

这取决于发生超时时要执行的操作

您可以进行
传递
以不执行任何操作并继续循环

try:
    run_bot()
except:
    pass
在您的情况下,最好将它显式地写为

try:
    run_bot()
except:
    continue
但是您也可以向EXPECT子句添加一些日志记录

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

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

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)

我应该补充一点,机器人的一个功能是,当它有一段时间没有检测到评论时,它会休眠10秒钟,然后再次检查,这样它就不会继续向Reddit发送垃圾邮件。如果我只执行以下操作:continue,循环是否仍会像try:run_bot()一样运行?有什么方法可以让你保持睡眠吗?我试着去理解:如果没有发现新的东西,
run\u bot
本身会睡眠10秒钟。在
run\u bot
完成后,您会再次睡觉吗?那么什么时候抛出异常呢?我相信当它试图连接到Reddit但失败时会抛出异常。run_bot(10)之后的睡眠是唯一的睡眠,然后我会将睡眠放在
run_bot
之前,并在except中继续。因此,循环将休眠10秒并运行bot。如果发生错误,循环将再次启动。。。您也可以将睡眠置于try之外,但要确保,对于所有问题,循环将始终睡眠10秒,但这样做会使程序重置变量吗?例如,我声明variable=10,每次它看到一条注释,它都会向变量添加1。因此,如果最终变量=14,并且它捕获了异常,那么变量仍然是14吗?