【发布时间】:2019-01-06 20:30:50
【问题描述】:
我正在尝试使用 argparse 进行解析。我有一个可选参数,称为 TileScheme:
parser.add_argument("--TileScheme", "--TS", default = PuertoRico2018)
我想将此参数的输入用作对象,所以我这样做:
TileScheme = eval(args.TileScheme)
但是,由于它是一个带有默认值的可选参数,我经常不想在可选参数中写入。我只想传递数值。但是,当我这样做时会收到此错误消息:
TypeError: eval() arg 1 must be a string or code object
即使 eval() 正在修改可选参数,它也会这么说!怎么办???
干杯! O.Fried
【问题讨论】:
-
args.TileScheme将是PuertoRico2018对象(无论是什么),或者您的用户提供的字符串。我建议做一个print(args),这样你就可以清楚地知道解析器在做什么。您的处理代码需要考虑到这一点。 -
如果
TileScheme应该是一个数字,那么int(args.TileScheme)(或float())比eval更好。您也可以在解析器中使用type=int。如果default不是字符串,则不会对其应用type。 -
它应该是一个字符串。当我执行 print(args) 时,我得到 'namespace(TileScheme=<__main__.tilescheme instance at>, X_coordinate=-60.1, Y_coordinate=18.4)'...
-
我真正遇到的问题是程序将 TileScheme 视为位置参数,而它应该是可选的..
-
非常感谢!
标签: eval argparse optional-arguments