Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 防止主系统中的回溯_Python_Logging_Error Handling_Try Except - Fatal编程技术网

Python 防止主系统中的回溯

Python 防止主系统中的回溯,python,logging,error-handling,try-except,Python,Logging,Error Handling,Try Except,在我的main.py模块中,我从util.py调用函数myFunc()。在util.py中,我处理myFunc()可能引发的异常,并调用sys.exit(1)。但是,我仍然在main.py模块中得到回溯打印。是否有一种方法可以简单地在util中捕获异常,而不必在main中处理任何输出,或者在main中捕获异常比在util中捕获异常更好 def get_token(token_name): token_handler = Tokens(token_name) try:

在我的
main.py
模块中,我从
util.py
调用函数
myFunc()
。在
util.py
中,我处理
myFunc()
可能引发的异常,并调用
sys.exit(1)
。但是,我仍然在
main.py
模块中得到回溯打印。是否有一种方法可以简单地在
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

这是一个设计原则的问题,但一般的想法是只有在知道如何处理异常时才捕捉异常

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

例如,您可以考虑修改<代码> UTIL.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
try:
    token = get_token(token_name)
except TokenException:
    ... # handle TokenException
except Exception:
    ... # handle any other Exception
类似地,您的
main.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
try:
    token = get_token(token_name)
except TokenException:
    ... # handle TokenException
except Exception:
    ... # handle any other Exception

这当然会产生更健壮的代码,因为调用方可以控制调用的函数。

是否可以至少粘贴处理异常的代码?@PRMoureu updated@NishantRoy是否可以修改util的代码?@cᴏʟᴅsᴘᴇᴇᴅ 是的,我能。您是否建议从
util
中删除
try,除了
,然后将其添加到
main