通过argparse传入JSON文件名后json.load加载报错如何解决
修复方案
错误原因
json.load()要求传入具备read()方法的文件流对象,你直接传入了命令行拿到的文件名字符串,因此触发属性不存在报错- 你的代码存在2处隐藏问题:未调用
parser.parse_args()解析命令行参数就直接使用args变量、未导入json模块就调用json.load方法
正确实现代码
import argparse import json # 导入json依赖模块 parser = argparse.ArgumentParser() parser.add_argument('-i', action='store', required=True, help='输入JSON文件的路径') args = parser.parse_args() # 解析命令行参数得到args对象 filename = args.i # 先打开文件得到文件对象,再传入json.load with open(filename, 'r', encoding='utf-8') as f: json_data = json.load(f) # 后续可以正常使用json_data print(json_data)
补充说明
- 使用
with open语法可以自动管理文件句柄的打开和关闭,无需手动调用f.close(),避免资源泄露 - 给
add_argument加上required=True参数可以避免用户漏传-i参数的异常
内容的提问来源于stack exchange,提问作者Bruce Banner
相关产品推荐
相关产品推荐

