试图编写一个函数来搜索转换为词典列表的请求响应。返回的每个用户将具有许多属性,但是我需要根据通过主函数传递的查询通过display_name
查找用户。
当前出现错误:
如果用户['display_name']中的查询:TypeError:类型为'NoneType'的参数不可迭代
功能定义
def search_users(self, query, group='any'):
# Returns list of dictionaries representing users
users = self.get_all_users()
for user in users:
if query in user['display_name']:
result_set.append(user)
主函数调用
looker.search_users('steve')
答案 0 :(得分:1)
只需更改行:
if query in user['display_name']:
到
if query in user.get('display_name',''):
如果键存在并且其值在None
中,则上述答案将不起作用,因此我根据@tobias_k注释-
if query in (user['display_name'] or ''):
答案 1 :(得分:0)
似乎您的display_name
值中至少有一个是None。
在这种情况下,使用in
关键字时,您正在寻找会引发异常的in None
。
根据您要如何处理这种情况,可以在尝试附加值之前检查该值是否存在。
for user in users:
if user and user['display_name'] and query in user['display_name']: # probably extract this check into a helper
result_set.append(user)
我将布尔逻辑提取到一个单独的方法中
def is_query_match(user, query):
if user and user['d'] and query in user['d']:
return True
return False
因此您可以使用:
for user in users:
if is_query_match(user, query):
result_set.append(user)