From 1ed708391e80a4de83e859b8364a32cc222df9ef Mon Sep 17 00:00:00 2001 From: yakigac <10434946+yakigac@users.noreply.github.com> Date: Sat, 18 Feb 2023 06:04:02 +0900 Subject: [PATCH] Fix a bug that shows "KeyError 'items'" (#1118) Fix KeyError 'items' when no result found. ## Problem When no result found for a query, google search crashed with `KeyError 'items'`. ## Solution I added a check for an empty response before accessing the 'items' key. It will handle the case correctly. ## Other my twitter: yakigac (I don't mind even if you don't mention me for this PR. But just because last time my real name was shout out :) ) --- langchain/utilities/google_search.py | 2 +- tests/integration_tests/test_googlesearch_api.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/langchain/utilities/google_search.py b/langchain/utilities/google_search.py index 19b8d46493c96..95ded0d688751 100644 --- a/langchain/utilities/google_search.py +++ b/langchain/utilities/google_search.py @@ -61,7 +61,7 @@ def _google_search_results(self, search_term: str, **kwargs: Any) -> List[dict]: .list(q=search_term, cx=self.google_cse_id, **kwargs) .execute() ) - return res["items"] + return res.get("items", []) @root_validator() def validate_environment(cls, values: Dict) -> Dict: diff --git a/tests/integration_tests/test_googlesearch_api.py b/tests/integration_tests/test_googlesearch_api.py index 7bbef2cb0a8a2..3693e212b3395 100644 --- a/tests/integration_tests/test_googlesearch_api.py +++ b/tests/integration_tests/test_googlesearch_api.py @@ -7,3 +7,13 @@ def test_call() -> None: search = GoogleSearchAPIWrapper() output = search.run("What was Obama's first name?") assert "Barack Hussein Obama II" in output + + +def test_no_result_call() -> None: + """Test that call gives no result.""" + search = GoogleSearchAPIWrapper() + output = search.run( + "NORESULTCALL_NORESULTCALL_NORESULTCALL_NORESULTCALL_NORESULTCALL_NORESULTCALL" + ) + print(type(output)) + assert "No good Google Search Result was found" == output