You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Python脚本传递数组命令行参数?二分查找脚本报错求助

解决命令行调用二分查找脚本的Traceback错误

我来帮你搞定这个问题,你的二分查找脚本在命令行调用时出错,主要是因为命令行参数的类型和解析方式不符合预期,下面是具体的原因和修复方案:

问题根源

  • 从命令行通过sys.argv传入的所有参数都是字符串类型:你输入的[1, 2, 3]是一个字符串,不是Python列表;8也是字符串,不是整数。而你的binary_search函数是针对整数列表和整数项设计的,直接传入字符串会导致索引操作、数值比较等逻辑报错。
  • 你直接对argv进行解包script, array, item = argv,如果用户输入参数数量不对(比如漏传),会直接抛出ValueError。

修复后的完整代码

from sys import argv
import ast

def binary_search(array, item):
    low = 0
    high = len(array) - 1
    while low <= high:
        mid = (low + high) // 2  # 非偶数时向下取整
        guess = array[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1
    return None

def main():
    # 检查参数数量是否正确
    if len(argv) != 3:
        print("用法: python3 binary_search.py <整数列表> <目标整数>")
        print("示例: python3 binary_search.py '[1,2,3]' 8")
        return
    
    script, array_str, item_str = argv
    try:
        # 安全解析字符串形式的列表为Python列表
        array = ast.literal_eval(array_str)
        # 验证列表元素是否都是整数
        if not all(isinstance(x, int) for x in array):
            print("错误: 列表必须仅包含整数元素")
            return
        # 将目标项转换为整数
        item = int(item_str)
    except (SyntaxError, ValueError) as e:
        print(f"参数解析失败: {str(e)}")
        return
    
    # 调用二分查找并输出结果
    result = binary_search(array, item)
    if result is not None:
        print(f"找到目标项,索引位置为: {result}")
    else:
        print("未找到目标项")

if __name__ == "__main__":
    main()

关键修复点说明

  1. 安全解析列表字符串:使用ast.literal_eval()替代eval(),它可以安全地将字符串格式的列表、字典等转换成对应Python对象,避免执行恶意代码的风险。
  2. 类型转换与校验:将命令行传入的目标项转换为整数,并校验列表元素是否都是整数,确保二分查找的数值比较逻辑能正常运行。
  3. 参数合法性检查:增加参数数量检查,给用户清晰的用法提示,避免因参数缺失或过多导致的报错。
  4. 结果输出:调用二分查找后,根据返回值明确输出查找结果,提升脚本的易用性。

正确的命令行执行方式

注意要把列表字符串用单引号或双引号括起来,防止Shell将列表中的逗号和空格解析成多个参数:

python3 binary_search.py '[1, 2, 3]' 8

内容的提问来源于stack exchange,提问作者Wizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:54:14