首页 > 解决方案 > Python 字符串函数 (isinstance) 未按预期工作

问题描述

作为 homie-pythom 实现的一部分是以下代码:

def isValidId(idString):
    """Validate device Id."""
    logger.debug("isIdFormat")
    if isinstance(idString, str):
        r = re.compile('(^(?!\-)[a-z0-9\-]+(?<!\-)$)')
        return True if r.match(idString) else False

其中 idString 已从 json 文件中读取,应为“cupboard”

print("Loading Config:" + configfile)
config = homie.loadConfigFile(configfile)
device = homie.Device(config)

配置是一个字典:

{
    "DEVICE_ID": "cupboard",
    "DEVICE_NAME": "cupboard",
}

使用配置创建 homie.Device 对象后,DEVICE_ID 将通过该字符串帮助函数传递,该函数确定它无效。

我在我的模块中重新创建了相同的代码:

print("Loading Config:" + configfile)
config = homie.loadConfigFile(configfile)
device = homie.Device(config)
print(config)
print("Config ID: " + config["DEVICE_ID"] + " Device Object iD:" + device.deviceId)
if device.deviceId != config["DEVICE_ID"]:
    print("homie.helpers.isValidId:")
    print(homie.helpers.isValidId(config["DEVICE_ID"]))

    print("isinstance(config['DEVICE_ID']:")
    print(isinstance(config["DEVICE_ID"], str))
    if isinstance(config["DEVICE_ID"], str):
        r = re.compile('(^(?!\-)[a-z0-9\-]+(?<!\-)$)')
        print(r.match(config["DEVICE_ID"]))

我在哪里得到以下信息:

{u'DEVICE_ID': u'cupboard', u'DEVICE_NAME': u'cupboard'}
Config ID: cupboard Device Object iD:b827ebf8fa72
homie.helpers.isValidId:
None
isinstance(config['DEVICE_ID']:
False

您可以看到 isInstance(config['DEVICE_ID'],str) 得到了错误。我认为这是我的问题的症结......为什么会这样?

此代码位于 rwspberry pi 上的 python 3.7 上。

即使在 python 中进行本地操作也会做同样的事情:

>>> import homie
>>> config = homie.loadConfigFile('sensorconfig/homie-dht-raspups.json')
>>> print config
{u'DEVICE_ID': u'cupboard', u'DEVICE_NAME': u'cupboard'}
>>> print(isinstance(config["DEVICE_ID"], str))
False

是你的“橱柜”吗?

标签: pythonpython-3.xstring

解决方案


推荐阅读