Python,如何在异常被捕获后保持程序运行

时间:2013-02-04 20:46:17

标签: python exception pyodbc

可能是一个简单的问题,因为我对python和编程一般都很新,但我目前正致力于改进我的程序,并且如果发现异常,就无法弄清楚如何保持程序运行。也许我正在以错误的方式看待它,但是例如我有这些方面的东西:

    self.thread = threading.Thread(target=self.run)
    self.thread.setDaemon(True)
    self.thread.start()

    def run(self):
        logging.info("Starting Awesome Program") 
        try:
            while 1:
                awesome_program(self)
    except:
        logging.exception('Got exception on main handler')
        OnError(self)

    def OnError(self):
        self.Destroy()

显然,我目前只是在遇到错误时杀了程序。 awesome_program基本上使用pyodbc来连接和运行远程数据库上的查询。连接丢失时会出现问题。如果我没有捕获异常,程序就会冻结,所以我将其设置为高于杀死程序,但如果没有人手动重启它,这并不总是理想的。是否有一种简单的方法可以保持程序运行或重新启动它。请注意错误的语法或糟糕的编程技巧。我正在努力教自己,我仍然是一个新手,有很多我不明白或者可能做得不好。如果需要,我可以发布更多代码。我不确定要发布多少而不是压倒性的。

3 个答案:

答案 0 :(得分:4)

在循环中捕获异常,并继续,即使捕获到异常。

def run(self):
        logging.info("Starting Awesome Program") 
        while 1:
            try:
                awesome_program(self)
            except:
                logging.exception('Got exception on main handler')
                OnError(self)

BTW:

  • 你的缩进似乎搞砸了。
  • 我更喜欢while True。与C不同,Python有bool类型,因此当需要bool时 - 给while一个bool。

答案 1 :(得分:3)

您正在寻找:

def run(self):
     while True:
         try:
             do_things()
         except Exception as ex:
             logging.info("Caught exception {}".format(ex))

答案 2 :(得分:0)

查看Python Exception Handling,特别是Try...Except。它允许您捕获特定错误并在您选择合适时处理它们,如果可能的话甚至完全忽略它们。例如:

try:
    while something == True:
        do_stuff()
except ExceptionType:
    print "Something bad happened!" #An error occurred, but the script continues
except:
    print "Something worse happened!"
    raise #a worse error occurred, now we kill it
do_more_stuff()