对于我当前的项目,我正在使用pyxb读取 xml 配置文件。但是应该可以通过提供命令行参数(使用 argparse 解析)来覆盖某些设置。
为了获得更具可读性的代码,我想使用通用方法并定义更新方法。参数更新必须使用 try-catch-block,因为 pyxb 确实在分配时验证新值(在这种情况下检查字符串是否符合模式)。
这是我尝试过的:
def override_setup(exp, args):
for param, arg in [[exp.param1, args.param1], [exp.param2, args.param2]]:
if arg is None:
continue
# this doesn't work, because param just references the string object referenced by exp.param1?
try:
param = arg
except Exception as e:
print e
# the following works
exp.param1 = "stuff"
我正在创建一个列表,其中包含 pyxb 参数到 argparse 命令行参数的映射。我认为这就是一切开始出错的地方。
我想要某种方法来使用某种循环进行此更新(因此我不需要为每个元素重复 try-catch-block)。
不幸的是 exp 似乎不是可迭代的。exp 的每个孩子都有一个 member _getDiagnosticName()
,它返回一个字符串,我可以将其用作到 argparse 读取的参数的映射。
我发现一篇文章描述了如何获取 argparse 结果的字典。因此映射(pyxb 元素 -> argparse 参数值)不再是问题。迭代是问题所在。
有任何想法吗?