Python:binascii.a2b_hex-gives";奇数长度字符串“;

Python:binascii.a2b_hex-gives";奇数长度字符串“;,python,Python,我从一个文本文件中获取了一个十六进制值,然后我将它传递给一个2b_十六进制,以将其转换为正确的二进制表示形式。以下是我所拥有的: k = open('./' + basefile + '.key', 'r') k1 = k.read() k.close() my_key = binascii.a2b_hex(k1) 当我打印k1时,正如预期的那样:81e3d6df 以下是错误消息: Traceback (most recent call last): File "xor.py", line

我从一个文本文件中获取了一个十六进制值,然后我将它传递给一个2b_十六进制,以将其转换为正确的二进制表示形式。以下是我所拥有的:

k = open('./' + basefile + '.key', 'r')
k1 = k.read()
k.close()
my_key = binascii.a2b_hex(k1)
当我打印k1时,正如预期的那样:81e3d6df

以下是错误消息:

Traceback (most recent call last):
  File "xor.py", line 26, in <module>
    my_key = binascii.a2b_hex(k1)
TypeError: Odd-length string
回溯(最近一次呼叫最后一次):
文件“xor.py”,第26行,在
my_key=binascii.a2b_hex(k1)
TypeError:奇数长度字符串

有什么建议吗?谢谢

我怀疑文件末尾有一个尾随的换行符。在将字符串传递到
binascii
之前,先剥离该字符串


注意,现在还有一个更简单的拼写:
k1.strip().decode('hex')

您确定文件中没有额外的内容吗?例如,空白


请尝试
k1.strip()

我更感兴趣的是,如果执行以下代码会发生什么:

with open("./" + basefile + ".key") as key_file:
   key = key_file.read()
   print len(key), key
想告诉我吗?可能有一些额外的字符,你只是看不到打印时。在这些情况下,请确保打印字符串的长度。

read()
不会删除换行符。如果文件末尾有一个
'\n'
,它将位于
k1


尝试
binascii.a2b_hex(k1.strip())
或可能
binascii.a2b_hex(k1[:8])

谢谢大家。我之前曾尝试剥离输入,但没有执行k1=strip(k1)。我做了strip(k1)。有时调用
text.strip().decode('hex')
时,它也会引发
TypeError:奇数长度字符串
:(