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