Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/hskj/anaconda3/lib/python3.5/site-packages/happybase/connection.py", line 242, in tables names = self.client.getTableNames() File "/hskj/anaconda3/lib/python3.5/site-packages/thriftpy/thrift.py", line 198, in _req return self._recv(_api) File "/hskj/anaconda3/lib/python3.5/site-packages/thriftpy/thrift.py", line 210, in _recv fname, mtype, rseqid = self._iprot.read_message_begin() File "thriftpy/protocol/cybin/cybin.pyx", line 439, in cybin.TCyBinaryProtocol.read_message_begin (thriftpy/protocol/cybin/cybin.c:6470) cybin.ProtocolError: No protocol version header
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
The problem seems related to the usage of the "strict read/write" flags. There is a non-standard "cybin" implementation of the standard Thrift binary protocol, the error is in this particular code block:
def read_message_begin(self): cdef int32_t size, version, seqid cdef TType ttype size = read_i32(self.trans) if size < 0: version = size & VERSION_MASK if version != VERSION_1: raise ProtocolError('invalid version %d' % version) name = c_read_val(self.trans, T_STRING) ttype = <TType>(size & TYPE_MASK) else: if self.strict_read: raise ProtocolError('No protocol version header') // <<<<<< name = c_read_string(self.trans, size) ttype = <TType>(read_i08(self.trans)) seqid = read_i32(self.trans) return name, ttype, seqid
Without having tried, I'd guess that setting the "strict read" flag to false (instead of true) when instantiating the CyBin protocol should do the trick.