MyNameIsDice
@MyNameIsDice

Как предпочтительнее писать блок try except?

Есть 2 варианта к написанию try except блоков:
1 - в каждом блоке проводится лишь одно действие которое может привести к исключению
2 - в одном блоке происходят несколько действий которые могут привести к различным исключениям
Я не уверен какой будет лучше, хотя первый и звучит более явно. А у второго меньше кода и выглядин он элегантнее. Вот и вопрос, какой подход считается предпочттельнее?

try:
        payload = decode_jwt_token(
            token.credentials, settings.secret_key, settings.jwt.algorithm
        )
except JWTError:
        raise exceptions.bad_credentials

user_id = int(payload.get("sub", 0))
try:
        user = get_user_by_id(session, user_id)
        return AuthenticatedUserSchema(user=user, token_payload=payload)
except NoResultFound:
        raise exceptions.bad_credentials


Или же

try:
        payload = decode_jwt_token(
            token.credentials, settings.secret_key, settings.jwt.algorithm
        )
        user_id = int(payload.get("sub", 0))
        user = get_user_by_id(session, user_id)
        return AuthenticatedUserSchema(user=user, token_payload=payload)
except (JWTError, NoResultFound):
        raise exceptions.bad_credentials
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
Dr_Elvis
@Dr_Elvis Куратор тега Python
В гугле забанен
Если у тебя должна быть одна и та же реакция на разные ошибки, другая реакция на другие ошибки, то второй вариант. Если на каждый тип ошибок своя реакция - то первый. Логично же и красиво.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
seven5674
@seven5674
Старый я уже что бы что-то в себе менять
try:
    ...
except JWTError:
    raise exceptions.bad_credentials
except NoResultFound:
    raise exceptions.bad_credentials


но с учетом того что у тебя raise одно и тоже то
try:
    ...
except (JWTError, NoResultFound):
    raise exceptions.bad_credentials
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы