防止 main 中的回溯

Prevent traceback in main

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

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

这是一个设计原则问题,但总体思路是捕获异常仅当您知道如何处理异常时

吞下异常不是一个好主意,因为它使调试变得更加困难。特别是当你有像这样写有多个调用点的关键代码时。函数内部生成的异常应该 re-thrown/re-raised 由调用该函数的代码处理。

例如,您可以考虑这样修改 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 看起来像这样:

try:
    token = get_token(token_name)
except TokenException:
    ... # handle TokenException
except Exception:
    ... # handle any other Exception

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