我有一个函数,它包含一个while
循环,在第一次传递后中断:
def format_sites(self, query_data):
# Convert the list of tuples to a list of dictionaries
self.query_data = query_data
self.x = 0
self.site_list = list()
self.site_dict = dict()
while self.x < len(self.query_data):
self.site_dict['site_id'] = self.query_data[self.x][0]
self.site_dict['title'] = self.query_data[self.x][1]
self.site_dict['subtitle'] = self.query_data[self.x][2]
self.site_dict['type'] = "menu"
self.site_dict['options'] = self.format_devices(DBHandler(Query().query_single_site(self.query_data[self.x][0])).rows)
self.site_list.append(self.site_dict.copy())
self.x += 1
return self.site_list
我知道行self.site_dict['options'] = self.format_devices(DBHandler(Query().query_single_site(self.query_data[self.x][0])).rows)
是导致问题的原因,因为当我删除它时,一切正常,但我的字典中缺少了options
键。你知道吗
更深入一点的信息。。。此函数从PSQL查询中获取站点列表,并将其格式化为用于构建菜单的字典语法。为了获得为每个“site option”构建的子菜单,我需要将我的子菜单项列表作为与options
键相关联的值。现在,format_devices()
自己运行得很好(我调用这个函数是为了一个列出我所有设备的菜单)。另外,我从另一个模块中调用的变量format_sites()
复制了self.format_devices(DBHandler(Query().query_single_site(self.query_data[self.x][0])).rows)
的大部分语法。我唯一能想到的是,不知何故,return self.device_list
结尾的format_devices()
可能是导致循环结束的原因。你知道吗
请原谅任何糟糕的格式,因为我用这个程序来真正学习Python。你知道吗
如果有其他部分的代码你需要看到,以便更好地回答这个问题,请让我知道。它来自相当多不同的模块,我认为这可能是太多多余的职位。你知道吗
而不是这个
与C或Java不同,一个好的pythonic解决方案将使用enumerate:
所以我们没有format\u设备的代码,但我怀疑问题是format\u设备在执行此操作时会迭代某些结构并修改self.x。如果这个猜想是正确的,那么它就解释了循环过早终止的原因;当第一个format\u设备调用时,self.x是零,但format\u data修改self.x,当它返回时,self.x比零大得多。如果大于查询数据的长度,则循环终止。如果是这种情况,那么解决方法是将format\u data和format\u sites中的self.x都更改为x,从而使循环计数器函数的作用域更大。你知道吗
这在代码中的其他地方也是一个问题-没有理由使对象具有作用域self.query\u数据变量,norself.site\u列表,也不是self.dict\u列表. 这些可以是查询数据、站点列表和目录列表。使用self.foo文件,您引用的是对象上的字段foo,而不是本地作用域为单个函数的临时变量,以及self.foo文件的状态将在对同一方法的多个调用(甚至其他也引用self.foo文件).
相关问题 更多 >
编程相关推荐