@@ -43,6 +43,32 @@ def __str__(self) -> str:
4343class FetchReleaseError (Exception ):
4444 """Expected errors while fetching release metadata from remote services."""
4545
46+ def __init__ (
47+ self ,
48+ message : str ,
49+ * ,
50+ url : str | None = None ,
51+ status_code : int | None = None ,
52+ detail : str | None = None ,
53+ ) -> None :
54+ super ().__init__ (message )
55+ self .message = message
56+ self .url = url
57+ self .status_code = status_code
58+ self .detail = detail
59+
60+ def __str__ (self ) -> str :
61+ context_parts = []
62+ if self .url :
63+ context_parts .append (f"url={ self .url } " )
64+ if self .status_code is not None :
65+ context_parts .append (f"status_code={ self .status_code } " )
66+ if self .detail :
67+ context_parts .append (f"detail={ self .detail } " )
68+ if not context_parts :
69+ return self .message
70+ return f"{ self .message } ({ ', ' .join (context_parts )} )"
71+
4672
4773class RepoZipUpdator :
4874 def __init__ (self , repo_mirror : str = "" ) -> None :
@@ -59,7 +85,11 @@ def _normalize_release_payload(result: object, url: str) -> list:
5985 logger .error (
6086 f"版本信息格式异常,期望列表或字典,实际为: { type (result ).__name__ } , url: { url } " ,
6187 )
62- raise FetchReleaseError ("版本信息格式异常" )
88+ raise FetchReleaseError (
89+ "版本信息格式异常" ,
90+ url = url ,
91+ detail = f"top_level_type={ type (result ).__name__ } " ,
92+ )
6393
6494 if not releases :
6595 return []
@@ -107,7 +137,11 @@ def _normalize_release_payload(result: object, url: str) -> list:
107137 )
108138
109139 if not normalized :
110- raise FetchReleaseError ("版本信息全部无效" )
140+ raise FetchReleaseError (
141+ "版本信息全部无效" ,
142+ url = url ,
143+ detail = f"invalid_entries={ invalid_entry_count } , total_entries={ len (releases )} " ,
144+ )
111145
112146 return normalized
113147
@@ -135,13 +169,25 @@ async def fetch_release_info(self, url: str) -> list:
135169 logger .error (
136170 f"请求 { url } 失败,状态码: { response .status } , 内容: { text } " ,
137171 )
138- raise FetchReleaseError (f"请求失败,状态码: { response .status } " )
172+ raise FetchReleaseError (
173+ "请求失败" ,
174+ url = url ,
175+ status_code = response .status ,
176+ detail = text [:500 ],
177+ )
139178 result = await response .json ()
140179 except FetchReleaseError :
141180 raise
142181 except (TimeoutError , aiohttp .ClientError , JSONDecodeError ) as e :
143- logger .error (f"解析版本信息时发生异常: { e } " )
144- raise FetchReleaseError ("解析版本信息失败" ) from e
182+ logger .error (
183+ "解析版本信息时发生异常。"
184+ f"url={ url } , error_type={ type (e ).__name__ } , detail={ e } " ,
185+ )
186+ raise FetchReleaseError (
187+ "解析版本信息失败" ,
188+ url = url ,
189+ detail = f"{ type (e ).__name__ } : { e } " ,
190+ ) from e
145191
146192 return self ._normalize_release_payload (result , url )
147193
0 commit comments