Python3字符串转换问题

Python3字符串转换问题,python,string,python-3.x,type-conversion,Python,String,Python 3.x,Type Conversion,我有一个功能: def push(push): ser.write(push + '\r') pull = ser.read(11) return pull 我这样称呼它: out = push("ka " + dp_id + " ff") 事实证明,它在python2上运行得非常好,但当我使用Python3时,我会出现以下错误: 不支持unicode字符串,请将其编码为字节:“ka 01” ff\r' 现在如果我这样做: out = push(b"ka " + dis

我有一个功能:

def push(push):
   ser.write(push + '\r')
   pull = ser.read(11)  
   return pull
我这样称呼它:

out = push("ka " + dp_id + " ff")
事实证明,它在python2上运行得非常好,但当我使用Python3时,我会出现以下错误:

不支持unicode字符串,请将其编码为字节:“ka 01” ff\r'

现在如果我这样做:

out = push(b"ka " + display_id + " ff")
我得到一个错误:

无法将字节连接到str


我很困惑。有什么帮助?

问题与推送本身无关。你写道:

b"ka " + display_id + " ff"
# ^bytes ^string      ^string
(前缀
b
表示您实际上编写了一个字节序列)

所以那是行不通的。您可以使用
.encode()
将字符串编码为字节数组,并在最后一个字符串上使用
b
前缀。因此:

b"ka " + display_id.encode() + b" ff"
# ^bytes ^bytes                ^bytes
b“ka”+显示id.encode()+b“ff”

#^bytes^bytes^bytes
问题与推送本身无关。你写道:

b"ka " + display_id + " ff"
# ^bytes ^string      ^string
(前缀
b
表示您实际上编写了一个字节序列)

所以那是行不通的。您可以使用
.encode()
将字符串编码为字节数组,并在最后一个字符串上使用
b
前缀。因此:

b"ka " + display_id.encode() + b" ff"
# ^bytes ^bytes                ^bytes
b“ka”+显示id.encode()+b“ff”
#^bytes^ bytes^ bytes