我在远程计算机上有一个长时间运行的程序,并希望确保(1)我有任何导致它终止的异常的记录,以及(2)如果终止,则通知某人.有没有人看到我使用的方法的缺点?(或建议更好的?)
我在这里阅读了Python文档和许多与例外相关的帖子,并了解毯子除了子句通常是个坏主意.在子例程和模块中我总是使用除了处理特定的预期异常,但是在程序的最高级别有一个"catch-all"except子句似乎很有用,以确保我可以在程序退出之前记录异常.
你怎么看?
import traceback
try:
# main program code here
except BaseException:
tb = traceback.format_exc()
msg = "Exiting program due to exception:" + tb
LogToFile(msg) # custom logging function
SendAlertEmail(msg) # warn admin that program terminated
raise # program exits with the existing exception
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是BaseException而不是Exception,因为如果终端上有人按下Ctrl-C,我想将其记录为退出程序的原因(并提醒管理员该程序已退出).但我想我也可以使用:
except Exception, KeyboardInterrupt:
Run Code Online (Sandbox Code Playgroud)