当前位置: 首页 > article >正文

python使用argparse解析命令行,如何正确传入科学计数法形式的浮点数

python使用argparse解析命令行,如何正确传入科学计数法形式的浮点数

argparse是一个很好用的python命令行解析工具,我们通常的传参习惯为,python script.py -flag1 value1 -flag2 value2 ...,即每个参数标识符后跟着参数的值,用空格隔开。然而在传入科学计数法表示的浮点类型参数时,可能会出错——究其原因,是科学计数法中包含了+-号,影响对数字类型的解析。

例程

下面给出一段代码,接受-na/-nb/-nc三个浮点数:

'''
Test passing scientific float number as parameters to argparse
'''

import argparse


if __name__=='__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("-na", type=float, default=0.0)
    parser.add_argument("-nb", type=float, default=0.0)
    parser.add_argument("-nc", type=float, default=0.0)

    args=parser.parse_args()
    print(args)

将这段代码保存为test_argparse.py文件。

传入普通浮点数,没有任何问题

在命令行执行如下命令,试图传入89.655、9.2113、-10.2三个浮点数 :

>python test_argparse.py -na 89.655 -nb 9.2113 -nc -10.2

输出结果为:

Namespace(na=89.655, nb=9.2113, nc=-10.2)

一切正常,没有问题。如果改用科学计数法,则会报错。错误的命令行传参形式

错误的传参形式

当改用科学计数法形式传入浮点数时:

python test_argparse.py -na -8.9655e+1 -nb -9.2113 -nc -1.02e+1

报错为:

usage: test_argparse.py [-h] [-na NA] [-nb NB] [-nc NC]
test_argparse.py: error: argument -na: expected one argument

正确的方式

使用等号“=”连接参数和科学计数法表示的数值:

python test_argparse.py -na=-8.9655e+1 -nb -9.2113 -nc=-1.02e+1

输出结果为:

Namespace(na=-89.655, nb=-9.2113, nc=-10.2)


http://www.kler.cn/a/312746.html

相关文章:

  • uniapp打包华为,提示请提供64位版本软件包后再提交审核
  • 论软件维护及其应用子问题
  • 使用 Vue 配合豆包MarsCode 实现“小恐龙酷跑“小游戏
  • Android OpenGL ES详解——纹理:纹理过滤GL_NEAREST和GL_LINEAR的区别
  • 现代Web开发:Vue 3 组件化开发实战
  • C++《stack与queue》
  • 力扣100题——杂题
  • Java集合(一)
  • C++ 文件操作
  • 十、数字人IP应用方案
  • chromedriver下载与安装方法
  • react之jsx基础(2)高频使用场景
  • DEPLOT: One-shot visual language reasoning by plot-to-table translation论文阅读
  • Android14请求动态申请存储权限
  • WGCAT工单系统 v1.2.1 支持导出PDF和分享创建工单功能
  • JAVA 根据开始和结束ip,计算中间的所有ip
  • 【MySQL】MySQL和Workbench版本兼容问题
  • 力扣每日一题 公交站间的距离
  • 远程访问NAS速度慢??那是因为你没用对。。。
  • 2024年9月北京docker安装+nvidia-docker
  • Clang插件演示-直接调用AI模型定义的变量完成模型推理
  • IP Source Guard技术原理与应用
  • 如何在GitHub上克隆仓库:HTTPS、SSH和GitHub CLI的区别
  • 【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
  • 【算法题】300. 最长递增子序列-力扣(LeetCode)
  • 【资料分析】刷题日记3