首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中一旦退出循环就会丢失dict内容

在python中一旦退出循环就会丢失dict内容
EN

Stack Overflow用户
提问于 2022-10-20 23:41:25
回答 1查看 38关注 0票数 -2

需要一些帮助..。子:一旦退出循环,就会丢失数据内容。dict使用循环vars填充,这些循环vars使用下标方法添加到dict中。下面的foo()总是被执行,因为team_oncall_dict在外部是空的。任何提示,我怎么能保留它,因为它是在循环内?

代码语言:javascript
复制
 def askduty_oncall(self, *args):
        session = APISession(PD_API_KEY, default_from=PD_USER_EMAIL)
        total = 1 #true or false
        limit = 40
        teamteamnm = "Team Test Team"
        team_esp_name = “Team Test Escalation Policy"
        teamteamid = ""
        teamesplcyid = ""
        team_oncall_dict = {}

        if args:
            offset = args[0]
            total_teams = args[1]
            
            if offset <= total_teams:
                print("\nfunc with args with new offset {} called\n".format(offset))
                teams = session.get('/teams?limit={0}&total={1}&offset={2}'.format(limit,total,offset))
            else:
                print("Reached max teams, no more team records to pull")
                return
        else:
            print("\nFunc with no args called, hence pull first set of {} teams as defined by limit var\n".format(limit))
            teams = session.get('/teams?limit={0}&total={1}'.format(limit,total))
        
        if not teams.ok:
            return
        else:          
            tj = teams.json()
            tjd = tj['teams']
            for adict in tjd:
                if not adict['name'] == teamteamnm:
                    continue
                elif adict['name'] == teamteamnm:
                    teamteamid = adict['id']
                    print("\nFound team..\nFetched",adict['name'], "id: {0}".format(teamteamid))
                    print("Pull escalation policy for team '{}':'{}'".format(teamteamnm,teamteamid))
                    esclp = session.get('/escalation_policies?total={0}&team_ids%5B%5D={1}'.format(total,teamteamid))
                    if not esclp.ok:
                        print("Pulling Escalation polices for team '{}' failed".format(teamteamnm))
                        return
                    else:
                        ep = esclp.json()
                        epj = esclp.json()['escalation_policies']
                        if not epj:
                            print("Escalation polices for team '{}' not defined".format(teamteamnm))
                            return
                        else:
                            for adict2 in epj:
                                if not adict2['summary'] == team_esp_name:
                                    continue
                                else:
                                    print("***************FOUND FOUND********************")
                                    teamesplcyid = adict2['id']
                                    print("\nFetched {} id: {}\n".format(team_esp_name, teamesplcyid))
                                    oncalls = session.get('/oncalls?total={0}&escalation_policy_ids%5B%5D={1}'.format(total,teamesplcyid))
                                    if not oncalls.ok:
                                        print(“issue “with oncalls)
                                        return
                                    else:
                                        ocj = oncalls.json()['oncalls']
                                        for adict3 in ocj:
                                            print("\n")
                                            print(adict3['escalation_level'])
                                            if i['escalation_level'] == 1:
                                                print(adict3['schedule']['summary'], adict3['user']['summary'])
                                                team_oncall_dict[adict3['schedule']['summary']] = adict3['user']['summary']
                                                print(team_oncall_dict)
                                                return team_oncall_dict


    if not team_oncall_dict: #part of func def
       do foo()

输出

代码语言:javascript
复制
foo stuff

示例数据是一组数据集。

代码语言:javascript
复制
[{'escalation_policy': {'id': 'P8RKTEE', 'type': 'escalation_policy_reference', 'summary': 'Team Escalation Policy'}, 'escalation_level': 3, 'schedule': None, 'user': {'id': 'PX8XYFT', 'type': 'user_reference', 'summary': 'M1’}, 'start': None, 'end': None}, 
{'escalation_policy': {'id': 'P8RKTEE', 'type': 'escalation_policy_reference', 'summary': 'Team Escalation Policy'}, 'escalation_level': 1, 'schedule': None, 'user': {'id': 'PKXXVJI', 'type': 'user_reference', 'summary': ‘R1’}, 'start': None, 'end': None}, 
{'escalation_policy': {'id': 'P8RKTEE', 'type': 'escalation_policy_reference', 'summary': 'Team’}, 'escalation_level': 2, 'schedule': None, 'user': {'d': 'PN8F9PC', 'type': 'user_reference’,'summary': ‘T1’}],'start': None, 'end': None}]

顺便说一句:上面是第四个内环。所以流就像这样。

代码语言:javascript
复制
def func1()
team_oncall_dict = {}

  loop1
     loop2
        loop3
           loop4
             ...
             team_oncall_dict
   if not team_oncall_dict:
     print("dict is empty")

输出

代码语言:javascript
复制
dict is empty
EN

回答 1

Stack Overflow用户

发布于 2022-10-21 01:10:33

T是地方性的,而不是全球性的。通过在函数之外全局声明team_oncall_dict来修正它。

结束符

代码语言:javascript
复制
def func1()
team_oncall_dict = {}
代码语言:javascript
复制
team_oncall_dict = {}
def func1()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74147351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档