我使用自定义异常来将我的异常与 Python 的默认异常区分开来。
当我引发异常时,有没有办法定义自定义退出代码?
class MyException(Exception):
pass
def do_something_bad():
raise MyException('This is a custom exception')
if __name__ == '__main__':
try:
do_something_bad()
except:
print('Oops') # Do some exception handling
raise
在此代码中,main 函数在 try 代码中运行几个函数。
在捕获异常后,我想重新引发它以保留回溯堆栈。
问题是“加注”总是退出 1。
我想使用自定义退出代码退出脚本(对于我的自定义异常),并在任何其他情况下退出 1。
我已经看过这个解决方案,但这不是我正在寻找的:引发异常时在 Python 中设置退出代码
该解决方案迫使我检查我使用的每个脚本,无论异常是默认的还是自定义的。
我希望我的自定义异常能够告诉 raise 函数要使用什么退出代码。
您可以覆盖sys.excepthook
做你想做的事:
import sys
class ExitCodeException(Exception):
"base class for all exceptions which shall set the exit code"
def getExitCode(self):
"meant to be overridden in subclass"
return 3
def handleUncaughtException(exctype, value, trace):
oldHook(exctype, value, trace)
if isinstance(value, ExitCodeException):
sys.exit(value.getExitCode())
sys.excepthook, oldHook = handleUncaughtException, sys.excepthook
这样,您可以将此代码放入一个特殊的模块中,您的所有代码只需导入该模块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)