2014-09-04 79 views
-2
number = 240 

while (number < 257): 
    data = format(number, 'x') 
    data_hex = data.decode("hex") 
    number = number + 1 

錯誤消息:Python的INT詛咒在while循環

data_hex = data.decode("hex") 
    File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode 
    output = binascii.a2b_hex(input) 
TypeError: Odd-length string 

我怎樣才能使while循環良好,比沒有放錯誤?

+0

您沒有包含錯誤。另外,如果你想擁有這個角色,使用'chr(number)'更容易。 – 2014-09-04 16:03:02

+0

你究竟在努力完成什麼?防止樣本錯誤的微不足道的解決方案不太可能解決您的實際問題。 – 2014-09-04 16:05:21

回答

1

你正在走這一步太遠; number = 256失敗在這裏:

>>> format(256, 'x') 
'100' 
>>> format(256, 'x').decode('hex') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode 
    output = binascii.a2b_hex(input) 
TypeError: Odd-length string 

這是因爲hex編碼只能處理兩個字符的十六進制值;你必須爲0,墊數量:

>>> format(256, '04x').decode('hex') 
'\x01\x00' 

或限制循環不產生256:

while number < 256: 

它是通過格式化數量更容易使用的chr() function,而不是去十六進制然後解碼:

data_hex = chr(number) 

演示:

>>> format(255, 'x').decode('hex') 
'\xff' 
>>> chr(255) 
'\xff' 

提供number保持低於255,當然。