From 6f2183cac8292e4b732431a00babaedd64d01fee Mon Sep 17 00:00:00 2001 From: nightcityblade Date: Sun, 26 Jul 2026 23:52:18 +0800 Subject: [PATCH] fix: coerce numeric API error codes to strings --- src/openai/_exceptions.py | 3 ++- tests/test_exceptions.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/test_exceptions.py diff --git a/src/openai/_exceptions.py b/src/openai/_exceptions.py index 09016dfedb..20329eaf5e 100644 --- a/src/openai/_exceptions.py +++ b/src/openai/_exceptions.py @@ -58,7 +58,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 = body.get("code") + self.code = str(code) if code 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_exceptions.py b/tests/test_exceptions.py new file mode 100644 index 0000000000..1ec90ea8e7 --- /dev/null +++ b/tests/test_exceptions.py @@ -0,0 +1,12 @@ +import httpx + +from openai import APIStatusError + + +def test_integer_error_code_is_coerced_to_string() -> None: + request = httpx.Request("GET", "https://api.openai.com/v1/models") + response = httpx.Response(404, request=request) + + error = APIStatusError("Not found", response=response, body={"code": 404}) + + assert error.code == "404"