我从昨天开始用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
有人可以解释这段代码有什么问题吗?
答案 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'}