【问题标题】:Pickle is saying it can't pickle a pygame.surface, but my object isn't a pygame.surfacePickle 说它不能腌制 pygame.surface,但我的对象不是 pygame.surface
【发布时间】:2020-05-20 03:18:14
【问题描述】:

基本上,我正在尝试腌制一个名为 State 的类,它包含我想要发送的游戏状态,它不包含任何 pygame.surfaces。但是酸洗是说我试图用这个错误来酸洗一个:TypeError: cannot pickle 'pygame.Surface' object。这是我的状态类:

class State():
def __init__(self):
    self.choosen = [None,None,None,None,None,None,
                    None,None,None,None,None,None];
    self.Won = None;
    self.tile = [0,0,0,0,0,0,
                 0,0,0,0,0,0]
    self.level = 1;
    self.pnum = [0,0];
    self.pCards = [[],[]];
    self.ready = False;
    self.turn = False;

这不包含 pygame.surface。 此处列出了其他相关代码段。

这是服务器发送信息的方式。我在上面声明了套接字。

def threaded_client(conn,player):
global pnum
conn.send(pickle.dumps(player));
reply = None;
while True:
    try:
        data = conn.recv(4096)
        state = pickle.loads(data);
        if not data:
            print("Disconnected");
            break;
        else:
            reply = state;
            print(pnum);
        state.ready = pnum == 2;

        conn.sendall(pickle.dumps(reply));
    except:
        break;

这就是我的网络类发送信息的方式。

def send(self,data):
    try:
        self.client.send(pickle.dumps(data))
        p = pickle.loads(self.client.recv(4096));
        return p
    except socket.error as e:
        print(e);

谢谢!

编辑:我发现了问题,选择的数组是图像。其中之一是,一旦你提出问题,你就会更加努力地检查你的代码以找到相当明显的东西。

【问题讨论】:

  • 看起来你用conn.send(pickle.dumps(player))发送你的玩家对象,我猜你的玩家对象包含一个pygame.surface。 minimal reproducible example 将帮助我们帮助您解决问题。

标签: python pygame pickle


【解决方案1】:

你有这行:

conn.send(pickle.dumps(player));

虽然您没有显示player 的定义,但由于这是一个 pygame 的东西,我将假设它是一个 Sprite。如果是,那么它将有一个 self.image 属性,即 Surface。这可能是投诉的来源。

【讨论】:

  • 抱歉,如果不清楚,玩家只是玩家 1 或玩家 2 的整数(0 或 1)。
  • 在这种情况下,如果有人能够提供帮助,您将不得不提供更多信息。我假设您确定它是 State 类的泡菜,因为回溯指向特定的行,它在哪里泡菜?该类具有许多在您显示的代码中未初始化的属性。它们是无、0 或空。那些最终会被设置成什么?请使用任何其他信息更新问题,以改进可以提供的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多