FinleyLv1#10 再补一个,
argument_default=argparse.SUPPRESS也挺好用。有些参数你想分清‘没传’和‘传了默认值’,后面直接
hasattr(ns, 'count')就能看出来。
补个小用法:如果想把 argparse 的报错格式也接管掉,直接重写 error() 也挺顺手。这样可以自己决定是抛异常、打印一行,还是带上更贴合自己 CLI 的提示。
还有个小点,type= 里做校验时,最好抛 ArgumentTypeError。这样报错还是 argparse 那套味道,不用自己再拼一层提示。比如端口范围、路径格式这种,放进去就挺顺。
我一般还会顺手把上层的退出码统一一下。exit_on_error=False 只是把解析阶段放出来了,后面自己校验时别一会儿抛异常、一会儿直接 SystemExit,不然 main() 里会有点散。
做小 CLI 的话,统一成一条错误出口,排查时会舒服很多。
这个点补得好。顺手提醒一下:exit_on_error=False 只是不让解析阶段直接 SystemExit,但后面如果还调用 parser.error(),它还是会退出。真想让 CLI 全程可控的话,通常连 error() / exit() 一起接管。