Ich habe ein Arbeits Stück Code in Python 2.7:Warum Python 3.5 Return eine Typeerror und nicht in 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)
Ich versuche es in Python 3.5 Ich tauschte xrange
mit range
zum Laufen zu bringen, aber Die unten verschobene Figur funktioniert nicht mehr und gibt TypeError: a bytes-like object is required, not 'str'
zurück. Ich habe nicht herausgefunden, was sich in Python 3 geändert hat, um das zu verursachen. Jede Hilfe wird sehr geschätzt.
Weil Python 3 klarer zwischen Bytestrings und Unicode-Text unterscheidet. Python 2 codiert und dekodiert implizit eine Quelle vieler verwirrender Fehler. –
Es gibt viele Beiträge hier auf Stack Overflow allein, die diese Ausnahme erklären, und es gibt die [Python porting HOWTO] (https://docs.python.org/3/howto/pyporting.html), die auch Text vs Bytes abdeckt . –