python程序报错后除了try except之外有没有好的办法再次启动

Python019

python程序报错后除了try except之外有没有好的办法再次启动,第1张

只处理应该处理的异常!只重试可以重试的过程!不要随随便便去加try...except...,不加考虑随便捕获只会给你自己的调试过程带来痛苦。

不是所有异常你都可以处理的,许多异常你就应该把它抛出到调用方去,如果你捕获住一个异常不往外抛,你就等于告诉调用方前面的过程没问题,可以继续往下走,但如果真的出现了问题,继续做下去往往会导致更严重的后果,通常都要比通过异常中止整个过程要糟糕。这些异常通常会最终抛出到执行程序的用户,或者通过服务的框架记录在日志里或返回给远程调用方,这样看到这个异常就有线索去查找问题了。只有你确信捕获了这个异常不会导致更严重的后果的时候才可以这么做,而且如果这并不是一个常规会发生的异常,一定要将这个异常写入日志记录下来,以提供查找问题的线索。

不是所有过程都可以重试的,许多过程你retry一次就会彻底搞乱整个流程,比如说Web接口调用出现了网络异常,这种情况下请求可能已经执行,也可能没有正确执行,大部分API设计的时候是没有幂等性的,如果你重试一次,就会重新做一次相应的操作,比如你这个操作是转账100元,那你重试一次就会多转100元。如果要引入失败重试的机制,就必须在过程设计上保证这个过程是幂等的,幂等的意思就是相同的过程执行多次不会引起不正常的结果。这个设计要求其实有很多讲究在里面,并不是那么容易就能满足的,所以正常来说我是反对这种无脑重试三次的代码的。

这个原则也可以引申到使用外部工具比如supervisord自动重启服务上,这其实是一个需要考虑的问题:

你的程序如果完全正常,那不该异常退出;

如果异常退出了,你又不知道出了什么异常,你怎么知道应该立即重启呢?

如果重启之后又异常退出了怎么办?

举个例子来说,某些程序crash的时候可能会产生dump文件,可能会写大量的异常日志,这种情况下如果被不加考虑地自动重启了,就会不断写日志或者生成dump,很快可能会将磁盘写满,导致其他服务乃至整个服务器出现异常。再比如某些程序启动的时候会调用外部服务,初始化过程可能会对外部服务造成压力,反复异常反复初始化就可能会导致整个外部服务都不可用。这些可能的后果需要进行谨慎的分析和讨论,所以一些支持相应功能的工具,会有一些配置,比如重启之后运行多长时间才允许再次重启之类,需要谨慎进行配置。

如果你不能做出充分的论证证明这些自动重试、自动重启的策略不会造成其他问题,我推荐你采用更保守的策略,只使用监控来检测服务是否可用,通过告警人工处理的方式来解决服务可能出现的异常崩溃,在你的服务足够稳定的情况下这并不会造成很大的运维压力,如果服务不够稳定,那你应该首先提高服务的稳定性。

KEEP IT SIMPLE AND STUPID, DON'T BE TOO SMART

有以下几点原因:

第一,有可能是只安装了pycharm,没有装anaconda,没有给编辑器添加解释器,所以运行不了代码。

第二,有可能是代码错误,如果下边爆红了,而且会有警告等词语,代码也无法运行。

第三,有可能是编辑器内部环境错误,没有添加编译环境。

pycharm主要功能

编码协助:其提供了一个带编码补全,代码片段,支持代码折叠和分割窗口的智能、可配置的编辑器,可帮助用户更快更轻松的完成编码工作。

项目代码导航:该IDE可帮助用户即时从一个文件导航至另一个,从一个方法至其申明或者用法甚至可以穿过类的层次。若用户学会使用其提供的快捷键的话甚至能更快。

代码分析:用户可使用其编码语法,错误高亮,智能检测以及一键式代码快速补全建议,使得编码更优化。

Python重构:有了该功能,用户便能在项目范围内轻松进行重命名,提取方法/超类,导入域/变量/常量,移动和前推/后退重构。