84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
经常看到有些模块,任何异常都不会崩溃,然后还是继续运行代码,自己试过在程序最外面加上try ----catch----但是好像并不能把所有错误信息都吞了,好像只对块内代码起作用,要是跳到另外的方法仍然会抛出异常,那种吞异常的是怎么写的呀?我现在有个需求要求代码一直跑。即使有异常也不能退出。。。请教各位大神指点
ringa_lee
这需要封装一个框架,然而你所描述的任何错误都继续运行。这种要求是你假设即使有错误也不影响程序的运行结果,那么这就意味着你自己能够控制错误的范围,如果这种错误发生的概率很大并且并不是致命的,你希望通过在主线程捕获,任何异常最终通过程序入口抛出。所以你应该是在程序运行启动块进行捕获。
try: main() except: pass
这种方式当出现异常是也会退出,如果希望再继续尝试。可以加一个循环
while time_out < max_time_out: try: main() except: pass timeout+=100
但这种方式必须你自己非常清楚程序在若干次尝试后能够正常,否则还是会退出。最后我想说的是,程序因为异常挂掉是提醒你真的应该去修复而不是忽略。如果忽略可以继续运行但是带来了错误的结果,你将后悔不已~
应该是
try....except
另外你在最外层加try..except,当程序出错后,只会在最外层捕捉到错误,然后就退出了,我有一个办法,不过出错后只能重头开始(最好找到出错的地方)
import sys def main(): print(1) int('s') def main1(): print(2) while True: try: main() except KeyboardInterrupt: sys.exit() except Exception: pass if __name__ == '__main__': main1()
这需要封装一个框架,然而你所描述的任何错误都继续运行。这种要求是你假设即使有错误也不影响程序的运行结果,那么这就意味着你自己能够控制错误的范围,如果这种错误发生的概率很大并且并不是致命的,你希望通过在主线程捕获,任何异常最终通过程序入口抛出。所以你应该是在程序运行启动块进行捕获。
这种方式当出现异常是也会退出,如果希望再继续尝试。可以加一个循环
但这种方式必须你自己非常清楚程序在若干次尝试后能够正常,否则还是会退出。
最后我想说的是,程序因为异常挂掉是提醒你真的应该去修复而不是忽略。如果忽略可以继续运行但是带来了错误的结果,你将后悔不已~
应该是
另外你在最外层加try..except,当程序出错后,只会在最外层捕捉到错误,然后就退出了,我有一个办法,不过出错后只能重头开始(最好找到出错的地方)