Foreword
Python 程序,特别是多线程的PyQt程序的子线程有时候会异常退出,IDE却不会报错。提供一种可以捕捉异常的方法。
起因
在做PyQt的多线程的程序时,有一次程序异常退出,IDE却没有给出报错。
在分析了一番之后,在子线程里面某个可能会出错的地方加上了try之后就没有异常退出了。去掉之后又会异常退出而且不报错。
分析加百度之后(其实基本都是百度XD),得出结论:长话短说,就是Python里面有的异常捕捉机制,并不能完完全全的捕捉到所有的异常。
这样的问题,在PyQt的子线程中很容易出现,子线程中有异常,却不会有报错信息。
解决办法
解决办法也很简单,用IDE的话,可以在主函数前面加上cgitb
这个包。用法如下:1
2import cgitb
cgitb.enable(format='text')
添加了之后,会在调试输出里面生成一个很详细的回溯,详细到你根本都用不着=。=,而且即使是很小的异常都会捕捉到,可以说是很敏感了。
什么?看不懂英文?cgitb
有两个方法可以调用。1
2
3
4
5cgitb.encable(display=1, logdir=None, context=5, format="html")
display: 1,发送至浏览器;0, 不发送
logdir: 错误日志保存目录
context: 显示错误代码周围的代码行数
format: 显示格式,除了'html',其余的都强制纯文本输出
打包程序异常退出
用Pyinstaller
等将Python程序打包成EXE可执行文件,但是打开就一闪而过,连错误都来不及看怎么办?
用命令行打开,就可以看到错误信息了。
按下Win+R
,Win
键就是键盘上Ctrl
和Alt
之间的那个有Windows图标的按键。然后输入cmd
,也就打开了命令行。输入:1
2
3start <你程序的完整路径>
例如:
start E:\QQ\Bin\QQ.exe
然后就可以看到报错信息了。