From 0c474f705828269fd2b5ebfa6260f18fbf966642 Mon Sep 17 00:00:00 2001 From: Moritz Leubner <93539320+MoritzLeubner@users.noreply.github.com> Date: Tue, 24 Mar 2026 18:22:21 +0100 Subject: [PATCH 1/2] Replaced meaningless 'No results found.' with clear error message --- ddgs/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ddgs/base.py b/ddgs/base.py index ec8bbc86..0c75fb57 100644 --- a/ddgs/base.py +++ b/ddgs/base.py @@ -119,6 +119,6 @@ def search( else: html_text = self.request(self.search_method, self.search_url, data=payload) if not html_text: - return None + raise ValueError("Empty response") results = self.extract_results(html_text) return self.post_extract_results(results) From 756226405c3c2fbe8fd794eaef84152cdf0ea813 Mon Sep 17 00:00:00 2001 From: Moritz Leubner <93539320+MoritzLeubner@users.noreply.github.com> Date: Tue, 24 Mar 2026 18:23:24 +0100 Subject: [PATCH 2/2] Handle additional HTTP error statuses in request method --- ddgs/base.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ddgs/base.py b/ddgs/base.py index 0c75fb57..54e41411 100644 --- a/ddgs/base.py +++ b/ddgs/base.py @@ -67,7 +67,10 @@ def request(self, *args: Any, **kwargs: Any) -> str | None: # noqa: ANN401 resp = self.http_client.request(*args, **kwargs) if resp.status_code == 200: return resp.text - return None + elif resp.status_code in (403, 429, 202): + raise ValueError(f"Request blocked with status code {resp.status_code} by rate limiting or anti-bot measures") + else: + raise ValueError(f"Request failed with status code {resp.status_code}") @cached_property def parser(self) -> LHTMLParser: