配置文件读进来长什么样
用 configparser 读一段 INI 格式的配置。运行下面这段程序,看它把自定义单位并进单位表之后的结果: import configparser LEN = {"m":
配置文件解决什么
有用户想加一个自家用的单位「里 = 500 米」。把它放进配置文件而不是改源码,好处是【0】。
什么时候该从文件读
用户要把 200 个长度一次全换算掉。让工具支持 --file 数据.txt,而不是让用户敲 200 次命令,判断依据是【0】。
补全:三类错误三个码
把前面几步合起来:用法错 2、单位错 3、其余成功 0。补全 main 里两个 except,输出五次调用的退出码。
补全:提示里要说出是哪个单位
光交回 3 还不够,用户还得知道是哪个单位不认识。补全 except 分支:把异常里带的那句话写到 err,再交回 3。输出退出码和 err 里的两行(用 / 拼)。
补全:不认识的单位单独一类
单位表里没有的单位,argparse 不会拦(长度单位太多,没用 choices)。现在它会以 KeyError 崩在字典取值上,被当成「其他错误」。补全 convert:先检查两个单位,不在表里就抛
补全:把报错换成人话
接管了 error 之后,补全 main:解析失败时把 err(扮演 stderr)里写一句「用法错误:」加原话,交回 2;成功交回 0。输出三次调用的退出码和 err 的行数。
错误信息说了什么
接管之后的异常里带着 argparse 的原话。运行下面这段程序,看它从两条错误信息里各认出了什么: import argparse class UsageError(Exception):
接管之后能拿到什么
下面把 error 重写成抛异常。运行这段程序,看两次错误各被接到了什么: import argparse class UsageError(Exception): pass class
怎么接管报错
想让 argparse 出错时不直接退出,而是交给自己处理。可行的做法是【0】。