由 Python2 和 Python3 中 socket.inet_aton() 实现不同引发的血案

将Python2.6的脚本迁移到Python3.4时,在使用socket.inet_aton()处理IP地址时遇到问题。主要差异在于Python2.6返回str,而Python3.4返回bytes。解决方法包括对bytes进行解码和编码,以适应MD5计算。在理解函数行为和处理编码问题后,最终得到正确结果。文章强调在迁移过程中了解新版本变化、清晰思路和解决问题的根本原因的重要性。
摘要由CSDN通过智能技术生成

这几天在做一个功能实现的时候,需要把别人用 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 直接进行连接操作。
也就是说

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值