From b00a48aa1fc96fe68d1f564619401e7d4affd7b8 Mon Sep 17 00:00:00 2001 From: Rajeev91691 Date: Thu, 13 Aug 2026 23:36:43 +0530 Subject: [PATCH] fix: coerce exception code to string or None --- src/openai/_exceptions.py | 3 ++- tests/test_client.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/openai/_exceptions.py b/src/openai/_exceptions.py index 86f44b0e15..516fce847f 100644 --- a/src/openai/_exceptions.py +++ b/src/openai/_exceptions.py @@ -71,7 +71,8 @@ def __init__(self, message: str, request: httpx.Request, *, body: object | None) self.body = body if is_dict(body): - self.code = cast(Any, construct_type(type_=Optional[str], value=body.get("code"))) + code_val = body.get("code") + self.code = str(code_val) if code_val is not None else None self.param = cast(Any, construct_type(type_=Optional[str], value=body.get("param"))) self.type = cast(Any, construct_type(type_=str, value=body.get("type"))) else: diff --git a/tests/test_client.py b/tests/test_client.py index bdbc2ce26b..34ba772a9d 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -2950,3 +2950,22 @@ def provider() -> str: assert len(calls) == 2 assert provider_call_count == 1 + + +def test_api_error_code_coercion() -> None: + from openai._exceptions import APIError + + request = httpx.Request("GET", "http://localhost") + + # Test integer code coercion + err = APIError("message", request, body={"code": 400, "param": "some_param", "type": "some_type"}) + assert err.code == "400" + + # Test string code coercion + err = APIError("message", request, body={"code": "invalid_api_key"}) + assert err.code == "invalid_api_key" + + # Test None code + err = APIError("message", request, body={"code": None}) + assert err.code is None +