Python 3.5.2脚本执行报exit code 139(SIGSEGV),求原因及解决方案
解决Python脚本运行时SIGSEGV(Exit Code 139)的问题
我来帮你分析这个段错误的问题——在Linux Mint 18.1(Serena)+ Python 3.5.2环境下出现Process finished with exit code 139 (interrupted by signal 11: SIGSEGV),本质是程序尝试访问了不允许的内存区域。结合你脚本里导入了wxPython和多个自定义Frame模块,大概率和以下原因有关:
可能的错误原因
- wxPython版本与系统不兼容:wxPython是基于C++的wxWidgets库绑定,老系统(比如Mint 18.1)的GTK库版本较旧,如果你安装的是新版wxPython(比如4.x+),很容易出现底层库冲突触发段错误。
- 自定义Frame模块存在内存访问问题:你导入的
Frames模块中,某个窗口类的初始化、事件绑定或控件操作可能存在错误,比如访问未初始化的控件对象、传入无效的父窗口参数,导致wxWidgets底层触发内存错误。 - 系统依赖库损坏或不匹配:Linux Mint 18.1的系统GTK库、Python 3.5相关依赖可能损坏,导致wxPython无法正常调用底层接口。
- 路径处理函数潜在问题:你的
get_parent_path函数未写完,但如果存在路径字符串处理错误(比如传入None给os.path相关方法),也可能间接引发内存异常。
具体解决步骤
1. 修复wxPython版本兼容性
这是最常见的解决方向,因为老系统对新版wxPython支持不佳:
- 先卸载当前的wxPython:
pip3 uninstall wxpython -y - 安装适配Python 3.5和Mint 18.1的旧版本wxPython,推荐用系统包管理器安装以匹配系统库:
或者用pip安装指定版本:sudo apt-get update && sudo apt-get install python3-wxgtk3.0 -ypip3 install wxpython==3.0.2.0
2. 排查自定义Frame模块的问题
逐步缩小范围找到崩溃源:
- 先运行一个极简的wxPython测试脚本,验证基础环境是否正常:
如果这个脚本能正常运行,说明wx环境没问题,再逐个导入你的import wx app = wx.App() test_frame = wx.Frame(None, title="Test Window") test_frame.Show() app.MainLoop()Frames模块(比如先导入Frames.MainFrame,运行脚本;再导入下一个),找到触发崩溃的具体模块。 - 针对出问题的模块,检查
__init__方法:是否有未正确初始化的控件?是否传入了无效的父窗口(比如不该传None的时候传了)?是否在事件处理函数中有错误的对象访问?
3. 修复系统依赖库
如果是系统库损坏导致的问题:
- 重新安装GTK和wx相关系统库:
sudo apt-get install --reinstall libgtk-3-0 libwxgtk3.0-0v5 -y - 修复Python 3.5的核心依赖:
sudo apt-get install --reinstall python3.5-dev python3.5-minimal -y
4. 完善并检查路径处理函数
补全get_parent_path并确保逻辑正确,比如正确的实现应该是:
def get_parent_path(): return os.path.split(os.path.abspath(__file__))[0]
避免传入无效的路径参数,引发底层内存错误。
5. 用调试工具精准定位崩溃点
如果以上方法都没解决,用gdb调试找到具体崩溃位置:
- 启动gdb调试Python进程:
gdb python3 - 在gdb中运行你的脚本:
run your_script.py - 崩溃后输入
bt查看调用栈,就能看到是wxWidgets的哪个函数或者你的哪行代码触发了段错误,方便针对性修复。
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

