如何调整Python的sys.argv取值逻辑,无sys.argv[5]时自动用sys.argv[4]
错误根因
sys.argv列表的第一个元素是当前执行的脚本文件名,因此当你传入4个业务参数时,sys.argv的总长度为5,原代码中if len(sys.argv) is 4:的判断条件完全不会命中,未传入第5个业务参数时程序会直接进入else分支读取sys.argv[5],触发索引越界。- 直接访问不存在的列表索引会直接抛出
IndexError,不能用if sys.argv[5] != True:的方式判断索引是否存在,判断逻辑执行前就会触发报错。
正确实现
首先先校验必填参数是否传入,再根据参数总长度判断是否存在可选的第5个业务参数,避免重复赋值公共变量,示例代码如下:
import sys # 先校验必填的4个业务参数是否传入,避免前序索引也越界 if len(sys.argv) < 5: print("参数不足,至少需要传入4个业务参数:location、order、amount、user") exit(1) location = int(sys.argv[1]) order = sys.argv[2] amount = sys.argv[3] user = sys.argv[4] # 长度>=6说明存在sys.argv[5],否则复用user的值 company = sys.argv[5] if len(sys.argv) >= 6 else user print(company)
内容的提问来源于stack exchange,提问作者Mythorim
相关产品推荐
相关产品推荐

