python - 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
是你的“橱柜”吗?
解决方案
推荐阅读
- r - 根据条件替换 R 数据框中的值
- javascript - 如何在 Node.JS 上使用请求模块(POST 方法)传递数据?
- javascript - Observable - 满足条件时停止序列
- java - Flink TaskManager 没有重新连接到新的 Jobmanager
- powershell - Powershell - Sendkeys - 多次发送相同的密钥
- neo4j - windows下无法安装neo4j 3.3.6/3.4.4社区版
- c# - 游戏文本输入框和按钮没有响应
- go - 如何在保留原始请求上下文的值的同时将 Context 传递给 r.WithContext?
- python - 大熊猫每个类别的计算
- java - nullpointexception:将数据插入firebase数据库时出错