gpt4 book ai didi

python - 使用 argparse 解析对象列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:10 25 4
gpt4 key购买 nike

我有一个程序,其函数接受类初始值设定项和对象列表。每个对象由 3 个变量 id、value 和 tag 组成。

class Package():

def __init__(self, id, value, name):
if (value <= 0):
raise ValueError("Amount must be greater than 0")
self.id = id
self.value = value
self.tag = tag


class Purchase():

def submit(some_list):
//Do stuff

def main():
//Help here!
parser = argparse.ArgumentParser()
parser.add_argument("id", help="ID")
parser.add_argument("value", help="Value")
parser.add_argument("tag", help="Tag")
args = parser.parse_args()
some_list = [args.id, args.value, args.tag]
submit(some_list)

我正在尝试在 main() 中实现 argparse,这样我就可以通过执行以下操作来运行程序:python foo.py "int0 [(int1, float1, int2), (int3, float2, int4) ....]”。列表中的对象数量是可变的,取决于用户输入。

initializer = num0

//First package object
package.id = num1
package.value = num2
package.tag = num3

//Second package object
package.id = num4
package.value = num5
package.tag = num6

最佳答案

您可以自定义argument type 并使用 ast.literal_eval()解析值。

工作样本:

import argparse
from ast import literal_eval


class Package():
def __init__(self, id, value, tag):
if (value <= 0):
raise ValueError("Amount must be greater than 0")
self.id = id
self.value = value
self.tag = tag


def packages(s):
try:
data = literal_eval(s)
except: # TODO: avoid bare except and handle more specific errors
raise argparse.ArgumentTypeError("Invalid 'packages' format.")

return [Package(*item) for item in data]


parser = argparse.ArgumentParser()
parser.add_argument('--packages', dest="packages", type=packages, nargs=1)
args = parser.parse_args()
print(args.packages)

现在,如果您运行该脚本,您将得到打印的 Package 类实例列表:

$ python test.py --packages="[(1, 1.02, 3), (40, 2.32, 11)]"
[[<__main__.Package instance at 0x10a20d368>, <__main__.Package instance at 0x10a20d4d0>]]

关于python - 使用 argparse 解析对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34823075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com