python3.5 thrift cybin.protocolerror:无协议版本头

zxlwwiss  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(851)
  1. Traceback (most recent call last):
  2. File "<stdin>", line 1, in <module>
  3. File "/hskj/anaconda3/lib/python3.5/site-packages/happybase/connection.py", line 242, in tables
  4. names = self.client.getTableNames()
  5. File "/hskj/anaconda3/lib/python3.5/site-packages/thriftpy/thrift.py", line 198, in _req
  6. return self._recv(_api)
  7. File "/hskj/anaconda3/lib/python3.5/site-packages/thriftpy/thrift.py", line 210, in _recv
  8. fname, mtype, rseqid = self._iprot.read_message_begin()
  9. File "thriftpy/protocol/cybin/cybin.pyx", line 439, in cybin.TCyBinaryProtocol.read_message_begin (thriftpy/protocol/cybin/cybin.c:6470)
  10. cybin.ProtocolError: No protocol version header
yqhsw0fo

yqhsw0fo1#

这个问题似乎与“严格读/写”标志的使用有关。标准节俭二进制协议有一个非标准的“cybin”实现,错误在这个特定的代码块中:

  1. def read_message_begin(self):
  2. cdef int32_t size, version, seqid
  3. cdef TType ttype
  4. size = read_i32(self.trans)
  5. if size < 0:
  6. version = size & VERSION_MASK
  7. if version != VERSION_1:
  8. raise ProtocolError('invalid version %d' % version)
  9. name = c_read_val(self.trans, T_STRING)
  10. ttype = <TType>(size & TYPE_MASK)
  11. else:
  12. if self.strict_read:
  13. raise ProtocolError('No protocol version header') // <<<<<<
  14. name = c_read_string(self.trans, size)
  15. ttype = <TType>(read_i08(self.trans))
  16. seqid = read_i32(self.trans)
  17. return name, ttype, seqid

如果没有尝试过,我想在示例化cybin协议时,将“strict read”标志设置为false(而不是true)应该可以做到这一点。

展开查看全部

相关问题