Python Argparse在Wheel打包及PyCharm中运行报错问题求助
问题解决方案
问题根源
Python 3.9版本的argparse模块存在已知bug:当多个可选参数都设置metavar=''(空字符串)时,程序生成帮助信息/usage提示的过程中会触发AssertionError。
- 命令行执行时若传入所有必填参数,不会触发帮助信息打印,因此无报错;
- PyCharm默认无参数运行、Wheel包无参数运行时,会触发参数缺失的错误提示,进而触发该断言失败。
修复方案
方案1:移除所有空metavar设置
直接删除每个add_argument中的metavar=''参数,让argparse使用默认参数占位符:
import argparse class ClsMain: def __init__(self): self.args = None def main(self): print("Control to function main") arg_parser = argparse.ArgumentParser() arg_parser.add_argument('--config_id', type=int, required=True, help='ClientID/ConfigID for the job' ) arg_parser.add_argument('--execution_platform', type=str, required=True, help='Databricks or others' ) arg_parser.add_argument('--file_system', type=str, required=True, help='Filesystem to access, whether local, mount or ADLS' ) arg_parser.add_argument('--re_run_id', type=str, required=False, help='ReRunID of the executed job' ) self.args = arg_parser.parse_args() print(arg_parser.print_help()) def prjmain(): cmain = ClsMain() cmain.main() print("Main Completed") prjmain()
方案2:设置非空且唯一的metavar值
给每个参数指定不同的非空占位符,避免触发断言:
# 示例:给每个参数设置对应metavar arg_parser.add_argument('--config_id', type=int, metavar='CONFIG_ID', required=True, help='ClientID/ConfigID for the job' ) arg_parser.add_argument('--execution_platform', type=str, metavar='PLATFORM', required=True, help='Databricks or others' ) # 其余参数同理设置唯一非空metavar
方案3:升级Python版本
将Python版本升级到3.10及以上,该bug在后续版本的argparse中已被修复。
内容的提问来源于stack exchange,提问作者shankar
相关产品推荐
相关产品推荐

