我试图弄清楚我的开发环境是否以某种方式搞砸了,因为"它适用于[我的同事]计算机",但不是我的.我没有找到问题的"肉",而是在研究我发现的第一个有趣的事情.
我有一些代码,没有理由为什么一个调用可以工作,另一个不是:
import sys import zmq if __name__ == "__main__": print sys.getdefaultencoding() # Displays 'ascii' zContext = zmq.Context() zSocket = zContext.socket(zmq.SUB) # This works. zSocket.setsockopt_string( zmq.SUBSCRIBE, "Hello".decode('ascii')) # This fails with error... why? # raise TypeError("unicode strings only") # # Shouldn't the default encoding for "Hello" be ascii? # zSocket.setsockopt_string( zmq.SUBSCRIBE, "Hello") zSocket.connect( "tcp://localhost:5000")
我假设对setsockopt_string的工作调用,我传递的是ascii字符数组.在破碎的代码中,我必须发送不是ascii而不是unicode的东西.我怎么知道什么传递给setsockopt_string?
也许这甚至不是要问的问题.我只是很困惑.
任何帮助都会很棒.
这是我的环境:
python --version Python 2.7.3 #1 SMP Debian 3.2.57-3+deb7u2 x86_64 GNU/Linux
谢谢.
由设置为setsockopt_string方法的unicode / str值引起的遇到的问题,快速解决方法是:
zSocket.setsockopt_string(zmq.SUBSCRIBE, b"Hello")
这将传递字节而不是字符串,或者如果在那里有变量,则应该这样写:
zSocket.setsockopt_string( zmq.SUBSCRIBE, bytes("Hello", encoding="latin-1") )
这将适用于python 2和3