我是Python的新手,前面有个愚蠢的问题
我需要将MySQL数据库与ldap的条目进行比较。当我尝试遍历字典并将它们传递给ldap3条目以显示结果时,我创建了一个字典来保存相应的值,它将变量作为文字。
for x in values_dict:
value2=values_dict[x]
try:
ldap_conn.entries[0].value2
except Exception as error:
print(error)
else:
print(value2)
attribute 'value2' not found
如果我将value2替换为'sn'或我已提取的任何其他属性,则它可以正常工作。我也玩过exec(),但这什么也没返回。
for x in values_dict:
value2=values_dict[x]
test1='ldap_conn.entries[0].{}'.format(value2)
try:
result1=exec(test1)
except Exception as error:
print(error)
else:
print(result1)
None
有任何想法吗?
编辑1:根据要求,这里是values_dict的值。如前所述,循环确实正确解析了这些属性,ldap确实返回了属性,但是当我尝试使用变量从条目中查找属性时,该变量实际上是采用的。
values_dict = {
"First_Name": "givenname",
"Middle_Name": "middlename",
"Last_Name": "sn",
"Preferred_Name": "extensionattribute2",
"Work_Location": "physicaldeliveryofficename",
"Work_City": "l",
"Work_State": "st",
"Work_Postal": "postalcode",
"Work_Email": "mail"
}
somevariable.someattr
您在此处使用的语法:
ldap_conn.entries[0].value2
总是意味着“访问命名的属性someattr
的somevariable
。” 它始终被解释为文字字符串。如果需要动态访问属性,请使用以下getattr
函数:
getattr(ldap_conn.entries[0], value2)
您当前不在任何地方分配该结果,因此您可能需要类似以下内容:
result1 = getattr(ldap_conn.entries[0], value2)
太棒了,它也是一个内置函数。感谢您指出!