Does raising a manual exception in a python program terminate it?
在python中调用raise语句会导致程序以traceback退出还是从下一个语句继续执行该程序? 我想提出异常,但继续使用余数程序。
好吧,我需要这个,因为我在第三方系统中运行该程序,我希望抛出异常但继续该程序。 相关代码是一个必须返回的线程函数。
我不能生成一个新的线程只是为了抛出异常并让程序继续?
I want to raise an exception but continue with the remainder program.
没有多大意义:程序控制要么继续通过代码,要么将调用堆栈波动到最近的
相反,你可以尝试一些:
-
traceback 模块(用于读取或检查您看到的跟踪信息以及异常;您可以轻松地将其作为文本获取) -
logging 模块(用于在程序运行时保存诊断)
例:
1 2 3 4 5 6 7 8 9 10 | def somewhere(): print 'Oh no! Where am I?' import traceback print ''.join(traceback.format_stack()) # or traceback.print_stack(sys.stdout) print 'Oh, here I am.' def someplace(): somewhere() someplace() |
输出:
1 2 3 4 5 6 7 8 9 | Oh no! Where am I? File"/home/kos/exc.py", line 10, in <module> someplace() File"/home/kos/exc.py", line 8, in someplace somewhere() File"/home/kos/exc.py", line 4, in somewhere print ''.join(traceback.format_stack()) Oh, here I am. |
只有未被捕获的异常才会终止程序。 如果您提出第三方软件不准备捕获和处理的异常,程序将终止。 引发异常就像软中止一样:你不知道如何处理错误,但你给任何使用代码的人都有机会这样做而不是只是调用
如果您没有准备退出程序,请不要引发异常。 只需记录错误即可。