Python 用命令行参数控制脚本:从 sys.argv 到默认值与错误提示

AI智能摘要
临时计算代码变成脚本后,参数缺失、格式错误或异常数值都可能让结果失去意义。文章以矩形面积为例,演示如何用 Python 内置的 sys.argv 接收长和宽:长为必填项,宽可省略并默认等于长;随后检查参数数量、转换数字,并验证数值有限且大于 0。出错时,脚本会将原因和用法写入标准错误,并以非零状态退出。无需额外框架,怎样让命令行脚本既灵活又不悄悄接受无效输入?
— 此摘要由AI分析文章内容生成,仅供参考。

把临时计算代码改成脚本后,常见需求是从命令行传入数据:参数齐全时按输入计算,少一个参数时采用合理默认值,输入格式不对时则明确告诉用户哪里有问题。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,并以非零状态退出,调用脚本的人也更容易发现执行失败。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享