4

可能是一个简单的问题,因为我对 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 在远程数据库上连接和运行查询。连接丢失时会出现问题。如果我没有捕捉到异常,程序就会冻结,所以我将它设置为它会杀死程序,但如果没有人手动重新启动它,这并不总是理想的。有没有一种简单的方法可以保持程序运行或重新启动它。随意责备我不正确的语法或糟糕的编程技能。我正在尝试自学,但我仍然是个新手,还有很多我不明白或可能做得不对的地方。如果需要,我可以发布更多代码。我不知道要发布多少才不会被压倒。

4

3 回答 3

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)

顺便提一句:

  • 你的缩进似乎搞砸了。
  • 我宁愿while True. 与 C 不同, Python 具有bool类型,因此当需要一个布尔值时 - 给出while一个布尔值。
于 2013-02-04T20:48:18.427 回答
3

你正在寻找这个:

def run(self):
     while True:
         try:
             do_things()
         except Exception as ex:
             logging.info("Caught exception {}".format(ex))
于 2013-02-04T20:50:07.933 回答
1

看看Python 异常处理,尤其是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()
于 2013-02-04T20:50:40.590 回答