无法转换为十六进制 - 类型错误:找到非十六进制数字



deviceToken = deviceToken.replace(' ','').decode('hex')行将使我的脚本崩溃。这是设备令牌:(修改了一些数字)

deviceToken = '9cdcb815 d93e11ce 52baaf6c 14e27cc8 31d5ce62 2e51ce6d f75692c2 3617cadb'

第一个推送通知发送良好,所以我确定设备令牌是ok的,但在第一个事件之后,我得到这个错误:

['"INBOX" (UNSEEN 12)'] 
Sent Push alert.
Got an event!
['"INBOX" (UNSEEN 13)']
Exception in thread Thread-4:Exception in thread Thread-4:
    Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 530, in __bootstrap_inner
        self.run()
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 483, in run
        self.__target(*self.__args, **self.__kwargs)
      File "server.py", line 111, in idle
        self.dosync()
      File "server.py", line 118, in dosync
        sendPushNotification(numUnseen)
      File "server.py", line 54, in sendPushNotification
        deviceToken = deviceToken.replace(' ','').decode('hex')
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
        output = binascii.a2b_hex(input)
    TypeError: Non-hexadecimal digit found

链接到脚本

您的设备令牌可能不是您所想的那样。也许它有一个换行符或其他一些你看不到的字符。

作为简单的测试:

>>> deviceToken = '9cdcb815 d93e11ce 52baaf6c 14e27cc8 31d5ce62 2e51ce6d f75692c2 3617cadb'
>>> deviceToken.replace(' ','')
'9cdcb815d93e11ce52baaf6c14e27cc831d5ce622e51ce6df75692c23617cadb'
>>> deviceToken.replace(' ','').decode('hex')
'x9cxdcxb8x15xd9>x11xceRxbaxaflx14xe2|xc81xd5xceb.Qxcemxf7Vx92xc26x17xcaxdb'