From 78106e7b4c76817e2e4cd791cc1534366242d113 Mon Sep 17 00:00:00 2001 From: deadzilla Date: Wed, 22 Jul 2026 22:36:55 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D1=83=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=B2=20comman?= =?UTF-8?q?ds/morning.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Если run_morning выбрасывает исключение, ошибка теперь перехватывается: логируется с exc_info, пользователю отправлено сообщение об ошибке. Тест обновлён — проверяется что исключение не пробрасывается наружу. --- commands/morning.py | 9 +++++++-- tests/test_commands_morning.py | 9 ++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/commands/morning.py b/commands/morning.py index eff724c..94b85e5 100644 --- a/commands/morning.py +++ b/commands/morning.py @@ -13,5 +13,10 @@ class Morning(commands.Cog): async def morning(self, ctx: commands.Context) -> None: """Погода, лучшие статьи за сутки и котик""" logger.info("%s: !morning запущен", ctx.author) - await run_morning(ctx.bot, ctx.channel) - logger.info("%s: !morning завершен", ctx.author) + try: + await run_morning(ctx.bot, ctx.channel) + except Exception: + logger.error("%s: !morning ошибка", ctx.author, exc_info=True) + await ctx.send("Ошибка при выполнении команды. Попробуйте позже.") + else: + logger.info("%s: !morning завершен", ctx.author) diff --git a/tests/test_commands_morning.py b/tests/test_commands_morning.py index 5bc5480..221db2b 100644 --- a/tests/test_commands_morning.py +++ b/tests/test_commands_morning.py @@ -72,7 +72,7 @@ class TestMorningCommand: @pytest.mark.asyncio async def test_morning_run_morning_raises(self) -> None: - """Ошибка в run_morning должна пробрасываться.""" + """Ошибка в run_morning ловится, пользователю отправлено сообщение.""" from commands.morning import Morning cog = Morning() @@ -80,5 +80,8 @@ class TestMorningCommand: with patch("commands.morning.run_morning", new_callable=AsyncMock) as mock_run: mock_run.side_effect = Exception("api error") - with pytest.raises(Exception, match="api error"): - await cog.morning(cog, ctx) + await cog.morning(cog, ctx) + + ctx.send.assert_awaited_once() + message = ctx.send.call_args[0][0] + assert "Ошибка" in message