Skip to content

Python 'Unknown flags on get' error while querying memcached #144

@OuterCloud

Description

@OuterCloud

I have solved this problem.

This is the solution in Chinese: https://www.cnblogs.com/LanTianYou/p/9204431.html

The solution is to modify the final else-block content in the method "_recv_value" in the python file "memcache.py".

The _recv_value method should be like this:

def _recv_value(self, server, flags, rlen):
    rlen += 2  # include \r\n
    buf = server.recv(rlen)
    if len(buf) != rlen:
        raise _Error("received %d bytes when expecting %d"
                     % (len(buf), rlen))

    if len(buf) == rlen:
        buf = buf[:-2]  # strip \r\n

    if flags & Client._FLAG_COMPRESSED:
        buf = self.decompressor(buf)
        flags &= ~Client._FLAG_COMPRESSED
    if flags == 0:
        # Bare bytes
        val = buf
    elif flags & Client._FLAG_TEXT:
        val = buf.decode('utf-8')
    elif flags & Client._FLAG_INTEGER:
        val = int(buf)
    elif flags & Client._FLAG_LONG:
        if six.PY3:
            val = int(buf)
        else:
            val = long(buf)  # noqa: F821
    elif flags & Client._FLAG_PICKLE:
        try:
            file = BytesIO(buf)
            unpickler = self.unpickler(file)
            if self.persistent_load:
                unpickler.persistent_load = self.persistent_load
            val = unpickler.load()
        except Exception as e:
            self.debuglog('Pickle error: %s\n' % e)
            return None
    else:
        self.debuglog("unknown flags on get: %x\n" % flags)
        # 注释掉这行
        # raise ValueError('Unknown flags on get: %x' % flags)
        # 设定返回值
        val = buf

    return val

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions