Python3.9.6运行ldif3代码报base64无decodestring属性错误
错误原因
该错误是Python版本与ldif3依赖包的兼容性问题导致的:
- Python
base64模块的decodestring()方法早在Python 3.1版本就被标记为废弃,官方推荐使用base64.decodebytes()作为替代,到Python 3.9版本该方法被正式移除,直接调用就会抛出AttributeError。 - 你使用的ldif3 3.2.2属于较早版本,内部代码仍然调用了已被移除的
base64.decodestring()方法,因此在Python 3.9环境下运行直接报错。
解决方案
有三种可行方案,按优先级排序如下:
方案1:升级ldif3到兼容版本
ldif3从v3.2.3版本开始修复了该兼容性问题,直接升级依赖即可解决,原有业务代码无需修改:
pip install --upgrade ldif3>=3.2.3
方案2:临时打补丁兼容(无需修改依赖版本)
如果受项目限制无法升级ldif3版本,可以在导入ldif3之前给base64模块添加别名映射,兼容旧版本调用逻辑:
import base64 # 为已移除的decodestring方法设置别名 base64.decodestring = base64.decodebytes from ldif3 import LDIFParser # 后续原有业务代码保持不变 parser = LDIFParser(open('dse3.ldif', 'rb')) for dn, entry in parser.parse(): if dn == "cn=Schema Compatibility,cn=plugins,cn=config": if entry['nsslapd-pluginEnabled'] == ['on']: print('Entry record: %s' % dn)
方案3:替换为官方维护的ldif模块
如果不想继续使用ldif3,可以改用python-ldap包提供的官方ldif解析模块:
首先安装依赖:
pip install python-ldap
仅修改导入语句即可,后续业务逻辑无需调整:
from ldap.ldif import LDIFParser # 后续业务代码保持不变
内容的提问来源于stack exchange,提问作者Rahul Srivastava
相关产品推荐
相关产品推荐

