0
我在Python 2.7的代码工作片:为什么Python的3.5返回一个类型错误,而不是在Python 2.7
def reversetomd5(knownhash):
clean=""
for i in [1,2,3,4,5,7,8,9,10,11,13,14,15,16,18,19,20,21,22,24,25,26,27,28]:
clean+=knownhash[i]
b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"
block=[]
for i in xrange(2,24,3):
p1 = b64.index(clean[i-2])
p2 = b64.index(clean[i-1])
p3 = b64.index(clean[i])
block.append(p1 << 12 | p2 << 6 | p3)
md5hash=""
for i in block:
n1 = i >> 8
n2 = i & 0xff
md5hash+=chr(n1)+chr(n2)
return binascii.hexlify(md5hash)
我试图把它在Python 3.5的工作我换xrange
与range
但在底部移动的字符不再起作用并且返回TypeError: a bytes-like object is required, not 'str'
。我一直无法弄清楚Python 3中改变了什么。任何帮助是极大的赞赏。
因为Python 3在字节串和Unicode文本之间做了更明确的区分。 Python 2隐式编码和解码,这是许多令人困惑的错误的来源。 –
单独的Stack Overflow有很多帖子解释了这个异常,并且有[Python porting HOWTO](https://docs.python.org/3/howto/pyporting.html),它也覆盖了文本和字节。 –