Python使用UDP做机器人控制器报TypeError: a bytes-like object错误如何解决
错误原因
Python 3中socket模块的sendto方法要求传入的第一个参数是字节类型对象,你当前代码中直接传入了字符串类型的'u'/'d'/'l'/'r'/'q',类型不匹配因此触发报错。
修复方案
有两种常用的修改方式,任选一种即可:
- 方式1:给字符串添加
b前缀,直接声明为字节串,例如把'u'改为b'u' - 方式2:调用字符串的
encode()方法,将字符串编码为字节格式,例如把'u'改为'u'.encode('utf-8')
另外注意需要先将代码中的my_ip值替换为你ESP8266 NodeMCU的实际IP地址,否则数据无法正常发送到目标设备。
修复后完整代码示例(采用方式1修改)
import socket import KeyPressModule as Key # 替换为你的ESP8266实际IP地址 my_ip = 'Use your IP' my_port = 8080 Key.init() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) def main(): if Key.get_Key('UP'): sock.sendto(b'u', (my_ip, my_port)) elif Key.get_Key('DOWN'): sock.sendto(b'd', (my_ip, my_port)) elif Key.get_Key('LEFT'): sock.sendto(b'l', (my_ip, my_port)) elif Key.get_Key('RIGHT'): sock.sendto(b'r', (my_ip, my_port)) else: sock.sendto(b'q', (my_ip, my_port)) if __name__ == '__main__': while True: main()
内容的提问来源于stack exchange,提问作者Haris Bin Yousaf
相关产品推荐
相关产品推荐

