我正在尝试制作一个灵活的参数解析器,它接受字符串,在其中查找参数,并创建一个字典,如下所示:
message = "--mass=12"
physics = comparse(message, "mass", "int", 10, "this is your mass attribute")
产品:{'mass': 12}
我无法更新和添加更多的参数/键(就像我想要添加一个'vel‘变量)。不幸的是,我是Python类的新手,虽然解析器可以检测到第一个参数,但我无法添加到字典中。下面是我的程序:
import shlex
class comparse(object):
def __init__(self, message, attribute, var_type, default, help_txt):
self.data = {} #This is the "data" dictionary that this function will ultimately return.
self.message = message
self.attribute = attribute
self.var_type = var_type
self.default = default
self.help_txt = help_txt
#Remove unwanted symbols (e.g. "=", ":", etc.)
self.message = self.message.replace("=", " ")
self.message = self.message.replace(":", " ")
self.args = shlex.split(self.message)
def parse(self):
try:
options = {k.strip('-'): True if v.startswith('-') else v
for k,v in zip(self.args, self.args[1:]+["--"]) if k.startswith('-') or k.startswith('')}
if (self.var_type == "int"):
self.data[self.attribute] = int(options[self.attribute]) #Updates if "attribute" exists, else adds "attribute".
if (self.var_type == "str"):
self.data[self.attribute] = str(options[self.attribute]) #Updates if "attribute" exists, else adds "attribute".
except:
if self.attribute not in self.message:
if (self.var_type == "int"):
self.data[self.attribute] = int(self.default) #Updates if "x" exists, else adds "x".
if (self.var_type == "str"):
self.data[self.attribute] = str(self.default) #Updates if "x" exists, else adds "x".
return self.data
def add_argument(self):
self.data.update(self.data)
message = "-mass: 12 --vel= 18"
physics = comparse(message, "mass", "int", 10, "this is your mass attribute")
comparse.add_argument(message, "vel", "int", 10, "this is your velocity attribute")
print (physics.parse())
comparse.add_argument
方法不起作用。很明显,我做错了什么,而类通常会让我感到困惑!有人能指出我的程序出了什么问题吗?
发布于 2018-06-11 00:04:17
在您给出的以下代码中
def add_argument(self):
self.data.update(self.data)
add_argument
不需要任何arguments.But,您已经完成了fllowing
comparse.add_argument(message, "vel", "int", 10, "this is your velocity attribute")
你已经给出了多个参数。这就是问题的原因。
要修复此问题,请尝试修改add_argument函数以接受您希望其处理的参数
编辑:根据您的评论,函数应该是
def add_argument(self,message, attribute, var_type, default, help_txt):
data = comparse.parse(message, attribute, var_type, default, help_txt)
self.data.update(data)
但是,在这里,解析方法实际上在您的代码中不接受任何参数,so..modify它以接受您需要的所有参数以及self
https://stackoverflow.com/questions/50785533
复制相似问题