pykeepass获取密码报错:'list'对象无password属性求助
解决pykeepass获取密码时的AttributeError问题
我一整天都在调试pykeepass库,想和KeePass配合使用。目前已经能获取群组列表,也能从kdbx文件的条目中提取标题和名称,但尝试获取密码时,出现错误:AttributeError: 'list' object has no attribute 'password'。刚安装的最新版本库,代码如下:
import pykeepass db_path = r'H:\personal_kp.kdbx' keyfile = r'h:\personal_kp.keyx' kp = pykeepass.PyKeePass(db_path,password=None,keyfile=keyfile) group = kp.find_groups(name='Network') print(group) group = kp.find_groups_by_name(group_name='Network') print(group) entry = kp.find_entries(title='system1') xyz = kp.find_entries_by_title(title='system2') xx = kp.entries testpwd = xyz.password print(f'Entry for ws1p1 = {entry}') print(f'Entry for ws2p3 = {xyz}') print(f'xx result {xx}') print(f'pass {testpwd}') print('Number of entries',len(kp.entries))
问题原因
find_entries和find_entries_by_title方法默认返回所有匹配条目组成的列表,而非单个条目。直接对列表调用.password属性,会触发AttributeError——因为列表没有该属性。
解决方法
根据匹配条目的数量,选择对应的处理方式:
- 确定只有一个匹配条目:
添加first=True参数,让方法返回第一个匹配的单个条目对象,之后即可正常调用.password:# 获取单个匹配条目 xyz = kp.find_entries_by_title(title='system2', first=True) entry = kp.find_entries(title='system1', first=True) # 正常获取密码 testpwd = xyz.password - 可能存在多个匹配条目:
遍历返回的列表,逐个处理每个条目:xyz_list = kp.find_entries_by_title(title='system2') for item in xyz_list: print(f"条目标题:{item.title},密码:{item.password}")
另外,find_groups和find_groups_by_name方法同样默认返回列表,若需单个群组,也需添加first=True参数。
内容的提问来源于stack exchange,提问作者gritts
相关产品推荐
相关产品推荐

