在Python程序中手动引发异常会终止程序吗?
在Python中,使用raise语句会导致程序抛出一个异常,这通常会让程序停止运行,并显示错误信息(也就是所谓的回溯)。不过,有时候你可能希望抛出异常后,程序还能继续执行后面的代码。比如,你在一个第三方系统中运行程序,希望能抛出异常,但又想让程序继续运行下去。你提到的代码是一个多线程的函数,它需要返回结果。那有没有办法单独开一个新线程来抛出异常,然后让主程序继续运行呢?
2 个回答
1
只有那些没有被处理的错误(也叫“未捕获异常”)才会导致程序停止。如果你抛出一个错误,而你的第三方软件没有准备好去处理这个错误,程序就会结束。抛出一个错误就像是轻轻地中止程序:你不知道怎么处理这个错误,但你给使用你代码的人一个机会去处理,而不是直接调用 sys.exit()
来结束程序。
如果你不想让程序退出,就不要抛出错误。可以选择记录这个错误。
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.