如何解决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
,
type
的 add_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 举报,一经查实,本站将立刻删除。