在python中调用raise语句会导致程序以traceback退出还是从下一个语句继续执行该程序?我想提出异常,但继续使用余数程序。 好吧,我需要这个,因为我在第三方系统中运行该程序,我希望抛出异常但继续该程序。相关代码是一个必须返回的线程函数。 我不能生成一个新的线程只是为了抛出异常并让程序继续?
答案 0 :(得分:2)
我想提出异常,但继续使用余数计划。
没有太大意义:程序控制要么继续通过代码,要么将调用堆栈波动到最近的try
块。
相反,你可以尝试一些:
traceback
模块(用于阅读或检查您与异常一起查看的追溯信息;您可以轻松地将其作为文本获取)logging
模块(用于在程序运行时保存诊断)示例:
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()
输出:
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.
答案 1 :(得分:1)
只有未被捕获的异常才会终止程序。如果您提出第三方软件不准备捕获和处理的异常,程序将终止。引发异常就像软中止:你不知道如何处理错误,但是你让任何使用代码的人都有机会这样做,而不是仅仅调用sys.exit()
。
如果您尚未准备退出该程序,请不要引发异常。只需记录错误。