我正在使用回调,它相当笨重,所以我想了解更多关于处理类之间错误的方法,以及将错误传播到主类的最佳方法。
如果我们有以下类布局:
由于我使用的是回调函数,因此当我创建一个Worker对象时,我会给它一个回调函数,然后逐步调用Helper类。因此,当Helper类生成一些已知错误时,它会“向上”移动到主类,并将该错误通知给用户。
答案 0 :(得分:2)
你使它变得比它需要的复杂得多。在处理之前,异常会弹出调用堆栈。这就是拥有异常而不是错误代码的重点:你不必将它们全部传递给堆栈,它们是自己完成的。
因此,只需从较低级别的代码中引发异常并在较高级别捕获它们 - 或者更准确地说:捕获它们可以处理它们的位置,并添加顶级catch-all处理程序对于记录错误的未处理异常(内置日志记录模块是您的朋友),尽可能尝试恢复,否则显示用户友好的错误消息并尝试尽可能干净地终止应用程序。
import logging
logger = logging.get_logger("myapp")
def something_deeper():
raise SomeException("yadda")
def execute_some_code(*args)
do_something()
something_deeper()
this_wont_happen()
def main(*args):
configure_logging()
try:
execute_some_code(*args)
except SomeRecovarableException as e:
warn_user(e)
try_to_recover_from(e)
except SomeUnrecovarableException as e:
logger.exception("oops, crashing")
try_to_exit_cleanly_if_possible()
finally:
do_some_cleanup()
if __name__ = "__main__":
import sys
main(*sys.argv())