我试图根据下面的json文件计算组件数量。
以下是我现在所拥有的:
# counter for the numbers of components
def get_numbers_devices(e, name, locator, counter=0):
if re.match(name, e.get(locator, None), re.I|re.M):
counter += 1
for child in e.get('children', []):
counter = get_numbers_devices(child, name, locator, counter)
return counter
例如:
num_memory = get_numbers_devices(data, 'bank:*', 'id') # memory banks
print(num_memory) # Output 2
但是,当我尝试使用下面的代码来计算我有多少磁盘时,它给了我TypeError。
num_hdd = get_numbers_devices(data, '\/dev\/sda', 'logicalname') # hdd Qty
print(num_hdd) # TypeError: expected string or bytes-like object
这似乎是我的正则表达式的一个问题,但我有点难以找出导致该问题的部分。
先谢谢大家。
json文件: dell.json
答案 0 :(得分:0)
问题是,未找到时的默认值是None
,它会在某个时刻返回,并且re
模块会阻塞它。
如果找不到,您应该将""
作为默认值返回。
另一个问题是,您的某些密钥已链接到列表(例如:['/dev/sda1', '/media/ict/KINGSTON']
),因此它也无效。
所以我无法为您提供一个运行示例,但是使用一些代码来检查数据类型,以便在找到非字符串时得到正确的错误消息:
def get_numbers_devices(e, name, locator, counter=0):
z = e.get(locator, "")
if type(z) is not str:
raise Exception("wrong value for {} key: {}".format(locator,z))
在我得到的数据上运行:
Exception: wrong value for logicalname key: ['/dev/sda1', '/media/ict/KINGSTON']