Запрет трассировки в основном
В моем main.py
модуль, я вызываю функцию myFunc()
от util.py
, В 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
1 ответ
Это вопрос принципа проектирования, но общая идея - ловить исключения только тогда, когда вы знаете, что с ними делать.
Глотать исключения не очень хорошая идея, потому что это делает отладку намного сложнее. Особенно, когда у вас есть критический код, написанный таким образом, с несколькими точками вызова. Исключения, сгенерированные внутри функции, должны быть переброшены / повторно вызваны для обработки кодом, вызвавшим эту функцию.
Например, вы можете рассмотреть возможность изменения 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
Это, безусловно, делает код более надежным, поскольку вы, как вызывающая программа, имеете контроль над вызываемой функцией.