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
?