这几天在做一个功能实现的时候,需要把别人用 Python2.6 写好的脚步转成 Python3.4 实现,大部分地方转化都没啥问题,但是在 socket.inet_aton() 转化的过程中出了点问题,花费我不少的精力去解决,先做个记录备忘,同时给后续需要的人做个提醒。
首先说一下,我在解决这个问题前期的思路有点问题,所以请关注最后的总结。
需求目的:把一个 ip 地址使用 socket.inet_aton() 转化后和一个字符串组合,然后算出 MD5。
下面是 Python2.6 的实现代码:
#!python2
# -*- coding: utf-8 -*-
import socket
import hashlib
if __name__ == '__main__':
ip = '192.168.1.12'
base_str = 'testSTR'
ip_md5 = hashlib.md5(socket.inet_aton(ip) + base_str).digest().encode('hex')
print(ip_md5)
运行后的输出结果为:
fc138bb4748a18f885cc321c2c6396e2
如果原封不动的使用 Python3.4 运行后,报错如下:
Traceback (most recent call last):
File "socket34.py", line 25, in <module>
test1()
File "socket34.py", line 10, in test1
ip_md5 = hashlib.md5(socket.inet_aton(ip) + base_str).digest().encode('hex')
TypeError: can't concat bytes to str
提示说的是,socket.inet_aton(ip) 的返回值是 bytes 类型,所以不能和 str 类型的 base_str 直接进行连接操作。
也就是说