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