Python3.7虚拟环境运行demo.py时遇AttributeError:module 'networkx' has no attribute 'nx_pydot'且无法生成TXT文件
问题解决指南
1. 修复NetworkX的AttributeError: module 'networkx' has no attribute 'nx_pydot'
你碰到的这个错误核心原因有两个:
- 你使用的NetworkX 1.7是非常老旧的版本(2012年发布),它的模块结构和后续版本差异很大,
nx_pydot并不是直接挂载在networkx主模块下的子模块; - 你已经显式从
networkx.drawing.nx_pydot导入了write_dot函数,却还要通过nx.nx_pydot.write_dot层级调用,这既没必要,也不符合当前版本的模块逻辑。
具体修复方案:
修改takahe2.py里的write_dot函数代码,直接使用已经导入的函数即可:
def write_dot(self, dotfile): """ Outputs the word graph in dot format in the specified file. """ # 直接调用导入的write_dot,无需通过nx.nx_pydot层级 write_dot(self.graph, dotfile)
如果后续还遇到NetworkX相关的其他兼容性问题,建议考虑升级到2.x系列的稳定版本(注意提前排查API兼容性,新版本有不少功能重构)。
2. 修复无法创建/写入TXT文件的问题
控制台能正常输出但文件没生成,大概率是因为前面的NetworkX异常导致代码中断,根本没执行到保存文件的逻辑。不过即使修复了异常,你的保存代码还有几个潜在坑:
潜在问题1:文件打开模式错误
你用的'+w'是无效的模式,正确的写入模式用w就足够,如果需要读写结合可以用w+。
潜在问题2:目录与权限隐患
- 要确认
createFolder('DataSet/')函数能正确处理目录已存在的情况,避免因目录创建失败导致写入出错; - 检查Linux下当前用户对
DataSet/目录是否有写入权限,可通过ls -l DataSet/查看权限,必要时用chmod调整。
优化后的保存代码:
# 用os.makedirs更可靠地确保目录存在(自动处理已存在的情况) import os os.makedirs('DataSet/', exist_ok=True) # 用with语句自动管理文件句柄,避免漏关文件 file_path = f'DataSet/{serial_no}.txt' with open(file_path, 'w', encoding='utf-8') as fi: fi.write(summary)
with语句会自动关闭文件句柄,避免因未关闭文件导致的写入失败;指定编码utf-8还能规避中文等非ASCII字符的编码问题。
内容的提问来源于stack exchange,提问作者louiz
相关产品推荐
相关产品推荐

