从给定键获取值时出现python词典错误

时间:2014-09-10 14:33:54

标签: python dictionary rfid

我从昨天开始用Python开始编码,我没有问题。 上下文是读取RFID卡并使用readed标签获取相关用户名的程序。这将在Terra板上的嵌入式Linux(Debian GNU / Linux 7(wheezy))中运行。 Python版本是(Python 2.7.3)。

我创建一个字典,用键/值对(两个字符串)填充它。当我尝试使用一个键获取值时,我得到一个我不理解的异常。

def FindTagByNumber(self, key):
    global tags

    value = ""
    try:
        print("All dictionary: " + str(self.tags))
        print("Get name from key: " + str(key))
        value = self.tags[key]
        print("Found the name from key: " + str(value))
    except Exception as ex:
        print("Exception: " + str(ex))

    return value

结果如下:

root@ariag25:/home/python# python main.py
RFID::Initialize
RFID::Get TAG Configurations
RFID::serial port opened
All dictionary: {'4D0055AB3A': 'test1', '4D0055B6E4J': 'test2'}
Get name from key: 4D0055B6E4J
Exception: '\x024D0055B6E4J\x03'
RFID::Couldn't found the tag

有人可以解释这段代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您仍然包括RFID开始和结束标志;十六进制值为02和03的字节;这些是不可打印的字节,因此在直接打印时不可见。字典中的所有键都不包含这些字节。

只是打印密钥意味着你没有看到那些字节,但是 那里:

>>> key = '\x024D0055B6E4J\x03'
>>> print key
4D0055B6E4J
>>> key
'\x024D0055B6E4J\x03'
>>> print repr(key)
'\x024D0055B6E4J\x03'

repr()函数有助于使这些字节可视化。

您可以删除这些字节:

key.strip('\x02\x03')

演示:

>>> key = '\x024D0055B6E4J\x03'
>>> key.strip('\x02\x03')
'4D0055B6E4J'
>>> tags = {'4D0055AB3A': 'test1', '4D0055B6E4J': 'test2'}
>>> key in tags
False
>>> key.strip('\x02\x03') in tags
True

另一种选择是将这些字节添加到字典键中:

{'\x024D0055AB3A\x03': 'test1', '\x024D0055B6E4J\x03': 'test2'}