% 不支持的操作数类型:'bytes' 和 'str'
unsupported operand type(s) for %: 'bytes' and 'str'
我收到以下行的错误:
command = input("please type command.example open 1")
#call the serial_connection() function
ser.write(b"%d\r\n"%command)
本质上我是要用户写的输入解析成ser.write,不要求输入直接把字符串放到ser.write
如:
ser.write(b'close1\r\n')
工作正常,只有当我尝试将输入结果作为字符串包含在 ser.write
中时才会出现问题
更多代码:
ser = 0
#Initialize Serial Port
def serial_connection():
COMPORT = int(input("Please enter the port number: "))
ser = serial.Serial()
ser.baudrate = 38400 #Suggested rate in Southco documentation, both locks and program must be at same rate
ser.port = COMPORT - 1 #counter for port name starts at 0
#check to see if port is open or closed
if not ser.isOpen():
print ('The Port %d is open - Will attempt to close lock 1 Stephan: '%COMPORT + ser.portstr)
#timeout in seconds
ser.timeout = 10
ser.open()
command = input("please type command.example open 1")
#call the serial_connection() function
ser.write(b"%d\r\n"%command)
else:
print ('The Port %d is **open** Stephan' %COMPORT)
如有任何疑问,请指教。
在Python3中你应该使用字符串格式化函数:
ser.write(b"{0}\r\n".format(command))
这适用于 Python 3.5 中的字节(参见 link)。
也许你可以尝试先解码字节字符串(如果它不是常量字符串,否则就从普通字符串开始),然后应用格式,然后再编码回来?
此外,您应该使用 %s
而不是 %d
,因为您的命令是用户的直接输入,它是一个字符串。
示例 -
ser.write(("%s\r\n"%command).encode())
如果您不传递任何参数,它默认为当前系统默认编码,您也可以指定要使用的编码,例如 utf-8
或 ascii
等。示例 - ser.write(("%s\r\n"%command).encode('utf-8'))
或 ser.write(("%s\r\n"%command).encode('ascii'))
% 的左侧参数应该是一个字符串,但您传递的是 b"%d\r\n",它是一个字节文字。
建议替换为
ser.write(("%d\r\n" % command).encode("ascii"))
我收到以下行的错误:
command = input("please type command.example open 1")
#call the serial_connection() function
ser.write(b"%d\r\n"%command)
本质上我是要用户写的输入解析成ser.write,不要求输入直接把字符串放到ser.write
如:
ser.write(b'close1\r\n')
工作正常,只有当我尝试将输入结果作为字符串包含在 ser.write
中时才会出现问题更多代码:
ser = 0
#Initialize Serial Port
def serial_connection():
COMPORT = int(input("Please enter the port number: "))
ser = serial.Serial()
ser.baudrate = 38400 #Suggested rate in Southco documentation, both locks and program must be at same rate
ser.port = COMPORT - 1 #counter for port name starts at 0
#check to see if port is open or closed
if not ser.isOpen():
print ('The Port %d is open - Will attempt to close lock 1 Stephan: '%COMPORT + ser.portstr)
#timeout in seconds
ser.timeout = 10
ser.open()
command = input("please type command.example open 1")
#call the serial_connection() function
ser.write(b"%d\r\n"%command)
else:
print ('The Port %d is **open** Stephan' %COMPORT)
如有任何疑问,请指教。
在Python3中你应该使用字符串格式化函数:
ser.write(b"{0}\r\n".format(command))
这适用于 Python 3.5 中的字节(参见 link)。
也许你可以尝试先解码字节字符串(如果它不是常量字符串,否则就从普通字符串开始),然后应用格式,然后再编码回来?
此外,您应该使用 %s
而不是 %d
,因为您的命令是用户的直接输入,它是一个字符串。
示例 -
ser.write(("%s\r\n"%command).encode())
如果您不传递任何参数,它默认为当前系统默认编码,您也可以指定要使用的编码,例如 utf-8
或 ascii
等。示例 - ser.write(("%s\r\n"%command).encode('utf-8'))
或 ser.write(("%s\r\n"%command).encode('ascii'))
% 的左侧参数应该是一个字符串,但您传递的是 b"%d\r\n",它是一个字节文字。
建议替换为
ser.write(("%d\r\n" % command).encode("ascii"))