From b1d18f26667c266918875f2d0307ccd439ecba0e Mon Sep 17 00:00:00 2001 From: xmz7891 Date: Wed, 7 Oct 2026 22:56:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=8F=91=E5=B8=83=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E5=B4=A9=E5=9C=A8=20Gitee=20=E9=82=A3=E4=B8=80=E6=AD=A5?= =?UTF-8?q?=EF=BC=9A=E8=BF=94=E5=9B=9E=20null=20=E6=97=B6=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=85=9C=E4=BD=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 发 1.9.0 时代码已经推到两个平台了,但建发行版那一步直接崩: AttributeError: 'NoneType' object has no attribute 'get' 根因:Gitee 的 GET /releases/tags/{tag} 在「标签存在、但还没有 发行版」时返回的是 **HTTP 200 + JSON 字面量 null**(不是 404)。 于是 json.loads() 得到 None,再取 ["id"] 就炸了。 实测那条接口对 v1.9.0 就是 200 + null 这个响应。 改成容忍 None —— 取不到 id 就走「新建发行版」那条路。 (另外记一笔:这次提交我本来想用 git commit -m 加多行中文, PowerShell 把引号搞乱了,git 报 Invalid path '/null'。 多行中文提交信息一律用 git commit -F 文件,别用 -m。) --- _build/_cmsg_release_fix.txt | 17 +++++++++++++++++ _build/release_all.py | 11 +++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 _build/_cmsg_release_fix.txt diff --git a/_build/_cmsg_release_fix.txt b/_build/_cmsg_release_fix.txt new file mode 100644 index 0000000..c7fb0fe --- /dev/null +++ b/_build/_cmsg_release_fix.txt @@ -0,0 +1,17 @@ +修发布脚本崩在 Gitee 那一步:返回 null 时没有兜住 + +发 1.9.0 时代码已经推到两个平台了,但建发行版那一步直接崩: + + AttributeError: 'NoneType' object has no attribute 'get' + +根因:Gitee 的 GET /releases/tags/{tag} 在「标签存在、但还没有 +发行版」时返回的是 **HTTP 200 + JSON 字面量 null**(不是 404)。 +于是 json.loads() 得到 None,再取 ["id"] 就炸了。 + +实测那条接口对 v1.9.0 就是 200 + null 这个响应。 + +改成容忍 None —— 取不到 id 就走「新建发行版」那条路。 + +(另外记一笔:这次提交我本来想用 git commit -m 加多行中文, +PowerShell 把引号搞乱了,git 报 Invalid path '/null'。 +多行中文提交信息一律用 git commit -F 文件,别用 -m。) diff --git a/_build/release_all.py b/_build/release_all.py index 561617d..ce07c4c 100644 --- a/_build/release_all.py +++ b/_build/release_all.py @@ -108,8 +108,15 @@ def gitee_release(token: str, version: str, body: str, with urllib.request.urlopen( "%s/releases/tags/%s?access_token=%s" % (api, tag, token), timeout=60) as resp: - rid = json.loads(resp.read().decode("utf-8", "replace")).get("id") - print(" • 该标签已有发行版 id=%s,复用" % rid) + # ⚠ Gitee 在"标签存在、但还没有发行版"时返回的是 JSON 字面量 + # **null**(不是 404)—— 于是 json.loads() 得到 None, + # 再 .get("id") 就是 AttributeError,整个发布脚本崩在半路 + # (代码已经推上去了,发行版却建不出来)。 + # 实测发 1.9.0 时踩到。所以这里必须容忍 None。 + data = json.loads(resp.read().decode("utf-8", "replace")) + rid = (data or {}).get("id") + if rid: + print(" • 该标签已有发行版 id=%s,复用" % rid) except urllib.error.HTTPError: pass