Files
skill-template/content-manager/content_manager/util/argparse_zh.py
2026-04-04 10:35:02 +08:00

75 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""argparse 中文错误说明。"""
from __future__ import annotations
import argparse
import sys
from typing import List
from content_manager.constants import CLI_REQUIRED_ZH
def split_required_arg_names(raw: str) -> List[str]:
s = raw.replace(" and ", ", ").strip()
parts: List[str] = []
for chunk in s.split(","):
chunk = chunk.strip()
if not chunk:
continue
idx = chunk.find(" --")
if idx != -1:
left = chunk[:idx].strip()
flag_rest = chunk[idx + 1 :].strip().split()
if left:
parts.append(left)
if flag_rest:
parts.append(flag_rest[0])
else:
parts.append(chunk)
return [p for p in parts if p]
def explain_argparse_error(message: str) -> str:
m = (message or "").strip()
lines: List[str] = ["【命令参数不完整或写错了】请对照下面修改后再执行。"]
if "the following arguments are required:" in m:
raw = m.split("required:", 1)[-1].strip()
parts = split_required_arg_names(raw)
for p in parts:
hint = CLI_REQUIRED_ZH.get(p)
if not hint and p.startswith("--"):
hint = CLI_REQUIRED_ZH.get(p.split()[0], None)
lines.append(f" · {hint or f'还缺这一项:{p}'}")
lines.append(" · 查看全部python main.py -h")
lines.append(" · 查看分组python main.py article -h")
return "\n".join(lines)
if "one of the arguments" in m and "required" in m:
lines.append(" · 本命令要求下面几组参数里「必须选其中一组」,不能都不写。")
if "--body-file" in m and "--body" in m:
lines.append(" · 请任选其一:--body-file 某文件路径 或 --body \"正文文字\"")
else:
lines.append(f" · 说明:{m}")
lines.append(" · 查看该子命令python main.py article add -h")
return "\n".join(lines)
if "unrecognized arguments:" in m:
tail = m.split("unrecognized arguments:", 1)[-1].strip()
lines.append(f" · 多写了不认识的参数:{tail},请删除或检查拼写。")
lines.append(" · 查看用法python main.py -h")
return "\n".join(lines)
if "invalid choice:" in m:
lines.append(f" · {m}")
return "\n".join(lines)
if "expected one argument" in m:
lines.append(f" · {m}")
lines.append(" · 提示:--xxx 后面必须跟一个值,不要忘记。")
return "\n".join(lines)
lines.append(f" · {m}")
lines.append(" · 查看帮助python main.py -h")
return "\n".join(lines)
class ZhArgumentParser(argparse.ArgumentParser):
def error(self, message: str) -> None:
print(explain_argparse_error(message), file=sys.stderr)
self.exit(2)