从IP地址获取MAC地址:Python 3.6.4代码转换字节报错求助
解决TypeError:descriptor 'encode'需要'str'对象而非'list'的问题
嘿,我明白你现在的困扰啦!你遇到的这个错误很典型——你尝试直接对整个IP列表调用str.encode(),但这个方法只能作用在单个字符串上,而不是列表对象,所以Python就报错了。
错误原因拆解
你写的代码大概是类似这样的:
ip_addresses = ["192.168.1.1", "192.168.1.2", "192.168.1.3"] ip_addresses_as_bytes = str.encode(ip_addresses) # 这里直接传了列表,所以报错
str.encode()是字符串的实例方法,需要调用在单个字符串上,而不是把列表作为参数传给它。
正确的处理方式
你需要遍历IP列表里的每一个元素,对单个IP字符串分别进行编码操作,有两种常用的方式:
方式1:使用for循环逐个处理
ip_addresses = ["192.168.1.1", "192.168.1.2", "192.168.1.3"] ip_addresses_as_bytes = [] for ip in ip_addresses: # 对每个IP字符串调用encode(),默认用utf-8编码,你也可以指定编码格式 ip_bytes = ip.encode() ip_addresses_as_bytes.append(ip_bytes) print(ip_addresses_as_bytes)
方式2:使用列表推导式(更简洁)
如果你喜欢更Pythonic的写法,列表推导式可以一行搞定:
ip_addresses = ["192.168.1.1", "192.168.1.2", "192.168.1.3"] ip_addresses_as_bytes = [ip.encode() for ip in ip_addresses]
额外提示
如果你是要获取MAC地址,后续可能会用到类似arp命令或者第三方库(比如scapy),编码后的字节数据可以直接用于这些操作啦。
内容的提问来源于stack exchange,提问作者Clownfused
相关产品推荐
相关产品推荐

