处理类之间错误的正确方法是什么?

时间:2013-12-20 17:24:22

标签: python

我正在使用回调,它相当笨重,所以我想了解更多关于处理类之间错误的方法,以及将错误传播到主类的最佳方法。

如果我们有以下类布局:

  1. 主类(管理用户输入)
  2. 工作者类(具有某些功能的对象,例如从邮箱获取数据)
  3. 帮助程序类(具有辅助函数的对象)
  4. 由于我使用的是回调函数,因此当我创建一个Worker对象时,我会给它一个回调函数,然后逐步调用Helper类。因此,当Helper类生成一些已知错误时,它会“向上”移动到主类,并将该错误通知给用户。

1 个答案:

答案 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())