如何运行接收布尔类型参数的Python文件?传参判断错误怎么解决?
问题根因
- 第一,
sys.argv是存储命令行参数的列表类型,第一个元素固定为当前执行的脚本文件名,后面的元素才是你传入的额外参数。你直接将列表和布尔值、空字符串做判断,条件永远不成立,所以无论你传不传参数,都会走else分支传入False,这就是你输出不符合预期的直接原因。 - 第二,命令行传入的参数都是字符串类型,就算你写的是
imperial_units=True,拿到的也是字符串"imperial_units=True",不能直接当做布尔值使用,需要做解析处理。
修复后的代码示例
import sys import pandas as pd def log_to_pickle(units): # 你的原有功能逻辑 if units == True: print('Imperial True') # 原有单位转换逻辑 elif units == False: print('Imperial False') # 原有单位转换逻辑 if __name__ == "__main__": # 英制单位默认值设为True use_imperial = True # 判断是否有传入额外参数 if len(sys.argv) > 1: # 取出第一个额外参数,按=分割后取参数值做判断 param = sys.argv[1].strip() if '=' in param: param_val = param.split('=')[-1].strip().lower() use_imperial = param_val in ('true', '1', 'yes') log_to_pickle(use_imperial)
测试效果
- 执行
python3 file.py:使用默认值True,输出Imperial True - 执行
python3 file.py imperial_units=True:解析后为True,输出Imperial True - 执行
python3 file.py imperial_units=False:解析后为False,输出Imperial False
内容的提问来源于stack exchange,提问作者mchd
相关产品推荐
相关产品推荐

