TypeError:类型'int'的参数在python中不可迭代

时间:2019-10-15 13:30:45

标签: python

从过去的2天开始,我一直在苦苦挣扎,基本上我想为Close标签具有“ -1”值的每个项目获取MeetingName。错误发生在行if str(-1) in contents['Close']:上,有时可以正常工作,有时会给出错误

 def meetingHandler(message):
    # path = str(message['path']).replace('/', '')
    data = message['data']
    #ended_meetings = []
    if data is not None:
        for name, contents in data.items():
            if str(-1) in contents['Close']:
                #ended_meetings.append(str(name))
                p1 = str(contents['Port_1'])
                p2 = str(contents['Port_2'])
                VoIP.close_ports(str(p1), str(p2))
                results = Constants.db.child('OnGoingMeetings').child(str(name)).remove()
            else:
                pass

这是字典中的输入数据。

<class 'dict'>: {'path': '/', 'data': {'Meeting_15911478': {'Close': -1, 'Port_1': '1245', 'Port_2': '2810'}, 'Meeting_15919478': {'Close': 0, 'Port_1': '1925', 'Port_2': '2310'}}, 'event': 'put'}

我尝试了tryexcept子句,但是仍然存在相同的问题。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

据我所知,contents['Close']在您的情况下为(标量)-1(分别为0)。没有设置,没有列表,没有包含该值作为成员的元组,因此很明显in操作将失败。

您可能想说contents['Close'] == -1,因为它也不是字符串,将-1转换为str也没有意义。


如果我获取您的输入数据和功能,请通过以下方式进行修改

  • 从上方添加我的建议(contents['Close'] == -1而非str(-1) in contents['Close']
  • 用适当的print()调用替换VOIP和数据库指令

我有

def meetingHandler(message):
    # path = str(message['path']).replace('/', '')
    data = message['data']
    #ended_meetings = []
    if data is not None:
        for name, contents in data.items():
            #if str(-1) in contents['Close']:
            if contents['Close'] == -1:
                #ended_meetings.append(str(name))
                p1 = str(contents['Port_1'])
                p2 = str(contents['Port_2'])
                print('VoIP.close_ports(' + str(p1) + ", " + str(p2) + ")")
                print("remove", name)
            else:
                pass

message = {'path': '/', 'data': {'Meeting_15911478': {'Close': -1, 'Port_1': '1245', 'Port_2': '2810'}, 'Meeting_15919478': {'Close': 0, 'Port_1': '1925', 'Port_2': '2310'}}, 'event': 'put'}
meetingHandler(message)

这给了我输出

VoIP.close_ports(1245, 2810)
remove Meeting_15911478