return None в finally перекрывает return user и может подавить исключение. Кроме того, показанный вызов не передаёт обязательный db; без корректного вызова и await запрос не выполнится.
Async get_user: отсутствующий db и return None в finally
return None в finally перекрывает return user и может подавить исключение. Кроме того, показанный вызов не передаёт обязательный db; без корректного вызова и await запрос не выполнится.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
async def get_user(user_id: int, db: AsyncSession): try: user = await db.get(User, user_id) return user finally: await db.close() return None
q = get_user(76576, )
Ответ
return None в finally перекрывает return user и может подавить исключение. Кроме того, показанный вызов не передаёт обязательный db; без корректного вызова и await запрос не выполнится.
Если сессией владеет вызывающий код, функция не должна закрывать её:
async def get_user(user_id, db):
return await db.get(User, user_id)
# Внутри async-функции с готовой сессией:
# user = await get_user(76576, db)
User и db здесь принадлежат приложению. В исходном q = get_user(76576,) сначала возникает ошибка аргументов; при исправленном вызове async-функция возвращает coroutine до await. Закрытие ресурса размещают у его владельца, без return в finally.