def extract_option_from_arg_list(options, optname, default_value):
if not options:
return default_value, options
try:
args = list(ast.iter_fields(ast.parse(f"f({options})", mode='eval')))[0][1].keywords
for idx,field in enumerate(args):
if field.arg == optname:
try:
value = eval(compile(ast.Expression(body=field.value), filename="<ast>", mode="eval"))
new_options = ','.join([x for x in options.split(',') if not x.strip().startswith(optname)])
return value, new_options.strip()
except:
raise ValueError(f"A constant value is expected for option {optname}: {options} provided.")
return default_value, options
except SyntaxError as e:
raise ValueError(f"Expect a list of keyword arguments: {options} provided")
评论列表
文章目录