Python 使用Flask SocketIO 5.0.1连接房间时出现类型错误

Python 使用Flask SocketIO 5.0.1连接房间时出现类型错误,python,python-3.x,flask,socket.io,flask-socketio,Python,Python 3.x,Flask,Socket.io,Flask Socketio,我正在尝试使用Flask在Python中设置一个web应用程序,为不同的用户提供多个房间,但是使用Flask SocketIO提供的join\u room,并执行脚本返回此错误: Exception in thread Thread-10: Traceback (most recent call last): File "D:\Python\Python39\lib\threading.py", line 954, in _bootstrap_inner self

我正在尝试使用Flask在Python中设置一个web应用程序,为不同的用户提供多个房间,但是使用Flask SocketIO提供的
join\u room
,并执行脚本返回此错误:

Exception in thread Thread-10:
Traceback (most recent call last):
  File "D:\Python\Python39\lib\threading.py", line 954, in _bootstrap_inner
    self.run()
  File "D:\Python\Python39\lib\threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "D:\Python\Python39\lib\site-packages\socketio\server.py", line 688, in _handle_event_internal
    r = server._trigger_event(data[0], namespace, sid, *data[1:])
  File "D:\Python\Python39\lib\site-packages\socketio\server.py", line 712, in _trigger_event
    return self.handlers[namespace][event](*args)
  File "D:\Python\Python39\lib\site-packages\flask_socketio\__init__.py", line 283, in _handler
    return self._handle_event(handler, message, namespace, sid,
  File "D:\Python\Python39\lib\site-packages\flask_socketio\__init__.py", line 751, in _handle_event
    ret = handler(*args)
  File "D:\master-thesis\safety-detector\server.py", line 30, in join_room
    join_room(roomId)
  File "D:\master-thesis\safety-detector\server.py", line 28, in join_room
    roomId = data['roomId']
TypeError: string indices must be integers
如果我将
join_room(roomId)
注释掉,则
camId
的分配将按预期工作,因此我不知道为什么会发生此错误

后端代码:

@socketio.on('connect')
def connection():
    @socketio.on('join-room')
    def join_room(data):
        roomId = data['roomId']
        camId = data['camId']
        join_room(roomId)
        emit('cam-connected', {'camId': camId}, broadcast=True)
        @socketio.on('disconnect')
        def on_disconnect():
            leave_room(roomId)
            emit('cam-disconnected', {'camId': camId}, broadcast=True)

代码中有一个名为
join_-room()
的函数,它隐藏着Flask SocketIO中的
join_-room()
函数

您的Socket.IO处理程序也有一个非常奇怪的结构,其内部函数不太可能工作(或者当您复制/粘贴问题中的代码时,缩进可能会出错?)。试着这样做:

@socketio.on('connect'))
def连接():
通过
@socketio.on(‘会客室’)

def my_join_room(数据):#当然是命名错误,谢谢!我只在收到某条消息后才使用内部结构添加处理程序,但是我使用了一个更好的(并且有效的)结构,如您所建议的。