[zeromq-dev] Python bindings strings and bytes
Arnaud Loonstra
arnaud at sphaero.org
Wed Nov 11 12:43:06 CET 2015
This is a frequent issue dealing with Python but how do we want to deal
with strings? Python strings are a bit cumbersome when dealing with C.
For example to use the Zyre bindings in python one needs to do one of
the following:
> from zyre import Zyre
> zn = Zyre(b'MyZyreNode')
or
> zn = Zyre('MyZyreNode'.encode('utf-8'))
This will work in both major Python versions.
The current unittest uses:
> z1 = Zyre('t1')
which only works in Python 2.
In Python 3 this excepts:
Traceback (most recent call last):
File "test.py", line 6, in test_all
z1 = Zyre('t1')
File "/home/people/arnaud/src/zyre/bindings/python/zyre.py", line
129, in __init__
self._as_parameter_ = lib.zyre_new(args[0]) # Creation of new raw
type
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type
We could just use bytes for everything but it has some consequences and
makes it a bit un-pythonic. For example the Zyre unittest tests for the
type of a Zyre event:
> self.assertEquals(e.type(), 'join')
type() returns a Python string and not a bytes object.
Actually I don't know of any other way as converting to a python string
needs encoding. Anybody thoughts about this?
Rg,
Arnaud
More information about the zeromq-dev
mailing list