Python,如何在捕获异常后继续程序运行
这可能是个简单的问题,因为我对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 个回答
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()
3
你在找这个:
def run(self):
while True:
try:
do_things()
except Exception as ex:
logging.info("Caught exception {}".format(ex))
5
在循环中捕捉异常,即使捕捉到了异常也要继续执行。
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
。因为Python有布尔类型,不像C语言,所以当需要布尔值时,给while
一个布尔值。