Python解释器运行脚本报错前总是先打印旧脚本输出内容该如何解决?
根因分析
你遇到的是Python新手常见的模块命名冲突问题,核心原因有两个:
- 你当前运行的脚本命名为
sys.py,和Python标准库自带的sys模块重名 - 你当前工作目录下还存在一个你早期写的测试脚本,命名为
numbers.py,同样和Python标准库的numbers模块重名,你看到的无关输出就是这个脚本运行时打印的内容。
异常触发逻辑
当你的sys.py运行出错触发异常后,系统默认的Python错误收集工具apport会尝试导入一系列标准库模块完成错误上报流程,其中decimal模块依赖标准库的numbers模块。
Python导入模块时会优先查找当前工作目录下的同名文件,因此会先运行你写的numbers.py,导致无关内容被打印,同时因为你写的numbers.py不包含标准库要求的Number属性,还额外抛出了后续的AttributeError。
修复步骤
- 将你当前的
sys.py改名,不要使用任何Python标准库的名称作为脚本名,可改为sys_test.py等自定义名称 - 找到当前工作目录下的
numbers.py,将其改为非重名名称,例如numbers_demo.py,同时删除同目录下对应的__pycache__缓存文件夹 - 检查当前工作目录下是否存在其他和Python标准库重名的脚本(如
random.py、math.py、json.py等),统一修改为自定义名称 - 重新运行脚本,异常输出就会消失
内容的提问来源于stack exchange,提问作者jusomebody
相关产品推荐
相关产品推荐

