防止主要的追溯

时间:2017-07-05 21:45:43

标签: python logging error-handling try-except

在我的main.py模块中,我从myFunc()调用了一个函数util.py。在util.py中,我处理myFunc()可能抛出的异常,并调用sys.exit(1)。但是,我仍在我的main.py模块中获得Traceback打印。有没有办法简单地捕获util中的异常而不必处理main中的任何输出,或者我是否更好地捕获main中的异常而不是util中的异常{1}}?

def get_token(token_name):

    token_handler = Tokens(token_name)
    try:
        token = token_handler.get()
    except TokenException  as e:
        logging.error("{error}".format(error=e))
        sys.exit(1)

    return token

1 个答案:

答案 0 :(得分:1)

这是设计原则的问题,但一般的想法是仅在您知道如何处理时才捕获异常

吞咽异常不是一个好主意,因为它使调试变得更加困难。特别是当您使用多个调用点编写这样的关键代码时。应该重新抛出/重新引发函数内部生成的异常,以便由调用该函数的代码处理。

例如,您可以考虑像这样修改let segment = VGSegment(frame: placeholder.frame, segmentConfiguration: config, titles: titles) segment.delegate = delegate categoryCtl = segment let tbButton = UIBarButtonItem(customView: segment) items?.remove(at: 0) items?.insert(tbButton, at: 0)

utils.py

同样,您的def get_token(token_name): token_handler = Tokens(token_name) try: token = token_handler.get() except TokenException as e: # write to some log file if needed raise e return token 看起来像这样:

main.py

这肯定会产生更强大的代码,因为您作为调用者可以控制您调用的函数。