gue*_*tli 15 python exception-handling robustness infinite-loop server
我在处理事件期间编写了一个处理事件和未捕获异常的服务器,不得终止服务器.
服务器是一个单线程的非线程python.
我想终止这些错误类型:
内置异常列表很长:https://docs.python.org/2/library/exceptions.html
我不想重新发明这个异常处理,因为我猜它以前做了好几次.
如何进行?
提示:这个问题不是关于在后台运行unix守护进程.它不是关于双叉而不是关于重定向stdin/stdout :-)
最上面的例外是BaseException. 下面有两个组:
Exception衍生的诸如Stopiteration、、等都是 的ValueError例子。TypeErrorException
之类的东西GeneratorExit,SystemExit都不KeyboardInterrupt是后裔Execption。
所以第一步是捕获Exception而不是捕获,BaseException这样您就可以轻松终止程序。我还建议捕获,GeneratorExit因为 1)它实际上永远不会被看到,除非它是手动引发的;2)你可以记录它并重新启动循环;3)它旨在表明生成器已退出并且可以清理,而不是程序应该退出。
下一步是用足够的详细信息记录每个异常,以便您可以找出问题所在(当您稍后进行调试时)。
最后,您必须自己决定Exception要终止哪个派生异常(如果有):我建议RuntimeError和MemoryError,尽管您可以通过简单地停止并重新启动服务器循环来解决这些问题。
所以,真的,这取决于你。
如果存在其他IOError严重到足以退出的错误(例如在尝试加载配置文件时),则负责加载配置文件的代码应该足够聪明,能够捕获该错误IOError并引发错误SystemExit。
至于白名单/黑名单——使用黑名单,因为应该只有少数(如果有的话)Exception基于例外情况,您需要实际终止服务器。