argparse 参数可能是 str 或 int 以及处理它的最简单方法

如何解决argparse 参数可能是 str 或 int 以及处理它的最简单方法

我不太清楚标题的措辞,但我正在尝试使用 argparse 输入两个变量。第一个参数可以是字符串或整数,第二个参数始终是整数。

一个示例是 python calnum.py -x 2 -y 4。在我下面的示例代码中,它将第一个参数视为字符串而不是 int。由于下面的第二个有效示例,我没有指定 type=int

一个例子是 python calnum.py -x curve -y 0

如果第一个参数是曲线,那么第二个参数应该是 0。下面我将它设置为零,这有效,或者更好的做法是显示错误并让用户实际为第二个参数输入 0 如果他们没有输入零还是使用帮助命令?

实际上,如果它设置为曲线,则根本不需要输入 y,只需将 y = 0 设置为下面或完全以另一种方式进行。

还有处理第一个参数的最佳方法是什么。首先验证它是否是一个int,然后将其转换为一个int来进行计算?我在下面有一些代码,不太知道如何处理它。当我刚刚开始阅读有关 argparse 的内容时,我可能会完全错误

是否有任何简单(简短)的方法可以从命令行处理这两个示例?我更喜欢易于阅读的代码,而不是简短而复杂的,因为我的经验有限。希望我解释得足够好,任何帮助将不胜感激,或者只是问我是否错过了解释,谢谢。

import argparse

my_parser = argparse.ArgumentParser()

my_parser.add_argument('-x',action='store')
my_parser.add_argument('-y',action='store',type=int)

args = my_parser.parse_args()

if args.x == "curve":
    args.y = 0
elif str.isdigit(args.x):
    args.x = int(args.x)

解决方法

处理它的最佳方法是将其作为字符串读取,并使用函数 str.isdecimal 来检查它是否为数字。如果是,则可以安全地使用 int(val) 强制转换为 int,否则,将其视为字符串。

也许是这样:

import argparse

my_parser = argparse.ArgumentParser()

my_parser.add_argument('-x',action='store')
my_parser.add_argument('-y',action='store',type=int)

args = my_parser.parse_args()

if args.x.isdecimal():
    as_int = int(args.x)
else:
    args.y = 0
,

typeadd_argument 参数接受检查和转换的可调用对象。

import argparse


def maybe_str_or_int(arg):
    try:
        return int(arg)  # try convert to int
    except ValueError:
        pass
    if arg == "curve":
        return arg
    raise argparse.ArgumentTypeError("x must be an int or 'curve'")


my_parser = argparse.ArgumentParser()

my_parser.add_argument('-x',type=maybe_str_or_int)
my_parser.add_argument('-y',type=int)

args = my_parser.parse_args(['-x','na'])  # cause error message
# args = my_parser.parse_args(['-x','curve'])  # no error
# args = my_parser.parse_args(['-x','123'])  # no error

if args.x == "curve":
    args.y = 0
elif not isinstance(args.x,int):
    print(args.x)


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?