我有很多模块。它们在每个文件中都有类似的try-except块,如下所示:
from shared.Exceptions import ArgException # and others, as needed
try:
do_the_main_app_here()
except ArgException as e:
Response.result = {
'status': 'error',
'message': str(e)
}
Response.exitcode('USAGE')
# more blocks like the above
将ArgException(和其他异常)定义为:
from abc import ABCMeta, abstractmethod
class ETrait(Exception):
__metaclass__ = ABCMeta
@abstractmethod
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
class ArgException(ETrait): pass
由于每个模块都使用类似的代码来捕获异常,有没有办法将异常捕获到所有模块使用的共享文件中?
答案 0 :(得分:0)
我不会这样做,但您可以在以下模块中创建一个函数:
from shared.Exceptions import ArgException # and others, as needed
def try_exec(execution_function)
try:
execution_function()
except ArgException as e:
Response.result = {
'status': 'error',
'message': str(e)
}
Response.exitcode('USAGE')
然后在需要尝试捕获指令块时调用try_exec(do_the_main_app_here)
,传递所需的参数以获得正确的上下文。
答案 1 :(得分:0)
答案是肯定的,你可以创建一个模块来做到这一点。
最简单的方法是创建一个接受两个参数的函数:另一个函数,其中包含您想要的代码"尝试"和"行动"在例外的情况下被采取。
然后:
def myModuleFunction(tryThisCode, doThis):
try:
returnValue = tryThisCode()
return returnValue
except ArgException as e:
if (doThis == "doThat"):
...
else:
...
然后,在导入新模块后,您可以使用以下功能:
myModuleFunction(divideByZero, 'printMe')
假设您有一个名为divideByZero();
的函数我希望这会有所帮助。