在我的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
答案 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
这肯定会产生更强大的代码,因为您作为调用者可以控制您调用的函数。