我想转换我以其他格式传递给argparse的参数;我们的想法是传递一个数字(通常是一个浮点数)并将其转换为字符串(通常为浮点数的Fortran表示法).
首先,我尝试创建自定义类型
def FortranFloat(value):
vfloat = float(value)
vfloat = str(vfloat) + "d0"
return vfloat
parser = argparse.ArgumentParser()
parser.add_argument("--xmin=", dest="xmin", type=FortranFloat, default=-2.0)
args = parser.parse_args()
它运作良好…如果我实际给出–xmin =参数.否则,它只保持-2.0,而不是按照我的意愿将其转换为-2.0d0.因此我认为可以更容易地给出我想要的格式的默认值,所以用’2.0d0’替换2.0 …有趣的是它被评估,因为它崩溃并引发以下错误
argparse.ArgumentError: argument --xmin=: invalid FortranFloat value: '-2.0d0'
为了解决这个问题,我尝试创建自定义操作
class FortranConverter(argparse.Action):
def __call__(self, parser, namespace, values, option_strings=None):
if type(values) is float:
values = str(values) + "d0"
setattr(args, self.dest, values)
parser = argparse.ArgumentParser()
parser.add_argument("--xmin=", dest="xmin", type=float, default=-2.0, action=FortranConverter)
args = parser.parse_args()
那也行不通.它似乎甚至没有通过我的行动(如果我在__call__中打印一些东西,它将忽略它).
任何想法,想法或解释将不胜感激!