把临时计算代码改成脚本后,常见需求是从命令行传入数据:参数齐全时按输入计算,少一个参数时采用合理默认值,输入格式不对时则明确告诉用户哪里有问题。Python 内置的 sys.argv 就能处理这个流程,不必引入额外的命令行框架。
用 sys.argv 读取参数
下面用计算矩形面积的脚本演示:长必须提供,宽可以省略;省略宽时,按正方形计算。
将代码保存为 area.py:
import math
import sys
def fail(message):
print(f"错误:{message}", file=sys.stderr)
print("用法:python area.py 长 宽", file=sys.stderr)
print("宽可以省略;省略时按正方形计算。", file=sys.stderr)
raise SystemExit(2)
args = sys.argv[1:]
if len(args) < 1 or len(args) > 2:
fail("请提供一个或两个参数。")
try:
length = float(args[0])
width = float(args[1]) if len(args) == 2 else length
except ValueError:
fail("长和宽必须是数字,例如 5 或 2.5。")
if not math.isfinite(length) or not math.isfinite(width):
fail("长和宽必须是有限数值。")
if length <= 0 or width <= 0:
fail("长和宽都必须大于 0。")
print(f"矩形面积:{length * width:.2f}")
sys.argv 是一个列表,其中 sys.argv[0] 通常是脚本文件名,后面的元素才是用户传入的参数。因此,代码用 sys.argv[1:] 取出参数本身。命令行参数最初都是字符串,计算前要用 float() 转成数字;如果转换失败,就会触发 ValueError。
运行脚本并检查不同输入
在终端切换到 area.py 所在目录后,可以这样运行:
python area.py 5 3
脚本会输出:
矩形面积:15.00
只提供一个参数时,代码将 width 设为 length,相当于计算边长为 5 的正方形:
python area.py 5
此时输出为:
矩形面积:25.00
也可以试试输入不符合预期的情况。下面的命令会因为参数不是数字而给出错误提示:
python area.py abc 3
如果参数个数不对,脚本同样会显示用法;如果输入零或负数,也会说明长和宽必须大于零。math.isfinite() 另外排除了无穷大和非数值这类特殊输入,避免它们通过普通的正数检查。
如果当前环境需要使用 python3 启动 Python,可以把示例命令中的 python 换成 python3。
默认值和错误提示怎么调整
默认值应符合脚本的实际用途,并在提示或说明中明确它代表什么。本例选择“宽度默认等于长度”,因此只传一个数字时计算结果仍有明确含义。若某个参数没有合理默认值,就应将它设为必填,而不是悄悄替用户猜测。
改写自己的脚本时,可以沿用同一顺序:先检查参数数量,再转换类型,随后验证取值范围,最后执行计算。遇到错误时,提示尽量指出原因和正确用法;把提示写到 sys.stderr,并以非零状态退出,调用脚本的人也更容易发现执行失败。








