Python警告异常 错误漏洞 疑难杂症 解决办法


相比其它编程语言,Python 输出错误 异常提示信息算是比较齐的。

万事无绝对,世上本无完美的事物,仍需对异常作进一步的处理。

注意,少用以下代码处理异常:

try:
    do some thing
except:
    pass
 
try:
    do some thing
except Exception:
    pass
					

由于这会捕获所有异常,因此,抑制了源代码的所有功能性不足 Bug,不利于后期调试。

以下是一些 Python 错误 异常常见解决办法或策略:

批量采集


采用专有进程批量采集,所有可能的错误 异常 一般信息。

之后再过滤出错误 异常,一条条加以手动修正。

此方式同常用编程,log 文件功能类似。

只是添加了自动化过滤能力,且进程独立。

提示信息


某些错误 异常无法避免且偶尔出现,可在适当位置输出其提示信息。

若有可能的话,后期想办法解决;有些问题,可能一时或永远无法解决 (或找到解决办法)。

由于提示信息被输出到调试后端,对用户而言不可见;尽可能通过批量采集获取,方便后期分析错误 异常提示原因。

强制展示


某些异常无法避免且较少出现,可向用户强制展示信息提示对话框。

若有可能,后期再想办法解决。

某些异常是很难解决的,或由无法避免的外部原因导致。

注意:可向用户强制展示这些异常,增强用户对应用程序的理解 信任,参与异常的解决过程。

无声漏洞


由于应用程序设计缺陷、不当参数、编程语言无法理解的语法 变量、编程语言的设计缺陷、等原因造成的异常。

这种异常可能没有提示信息 (或信息不足),如闪崩、卡死、内存突然大幅升高、有规律性的偶尔出错、等等。

注意:无声漏洞本身并非完全无声,包括:调试方法不对、调试者没注意到、应用场景不当或没找到调试入口。

譬如:应用已退出来不及输出异常提示、异常代码目前不使用、上下文关系不明确、 缩进错误不明显。

无声漏洞要花不少时间来解决,需开发者本人、对应用场景理解很深的人或行业专家的深度参与。

此类异常要彻底解决 (或改良),否则,别说影响用户体验,可能连正常使用都成问题。

若某一问题长时间无法被解决且对用户体验影响极差,此应用程序完了。

要体现一个程序员的水平,也就是修正此类问题。

代码问题


在编写源代码时,存在各种考虑不周的异常很正常。

源代码异常,由开发者解决最好。

对于开源软件,使用者可以自已想办法解决。

若是闭源软件,在没有参考资料的情况下,一般很难解决。

多种入口


当源代码存在严重且难于修正的异常时,可采用多版本或多种 IDE、多种编译 打包 分发工具、等作为测试入口调试。

可测试整个工程、单模块、单功能,甚至对每个函数、每行代码进行原子化调试。

同样是 Python 技术,在 CPython Cython PyInstaller 下是有差异的。

不同的 CPython 版本之间,也有一些差异。

并行 IDE


对于多入口调试,进行单工程 多版本 柔性 并行开发,是有必要的。

比较式开发,便于找出不同版本之间的共性 差异;特别是将工程分为源代码版、调试版、发布版、新版、旧版、稳定版等。

如仅将 Python 2.7 (存在很多现成技术 参考资源) 作为比较参考源,3.4 3.5 3.6 之后的版本只要稳定、操作系统 (或用户和应用场景) 支持,都可以并行推进。

多版本柔性 并行开发不能要求所有版本权重都一样,相对传统 IDE,推荐使用 Digital IDE .

开发效率


开发新功能源代码时,开发效率、调试时间及调试频率要适当。

开发很多新功能却很少调试或调试时间花费少,有时会产生意料不到的情况或 Bug。

尤其当出现程序架构、开发逻辑、编程语言、新旧框架或编译器兼容性导致的无声漏洞,调试时会很头痛。

这也是 Python 为什么比 Java C/C++ 等编程语言先天性存在开发优势的原因,编写更少的代码却能获得更多的功能。

相同功能下 Python 源代码量只有 C/C++ 代码量的 20 - 30%,当使用 Cython 编译器 把 Python 代码转换成 C 语言中间代码时就能看到。

See also:

Python 编程 盲区死角 注意事项 解决办法

程序漏洞和使用场景 设备硬件 线程进程的关系 产生原因

PySide2 PyQt5 错误异常 调试漏洞 疑难杂症 解决办法汇总

Copyright Notice: This article is exclusive original manuscripts, copyrighted by Happy Digits Software , shall not be reproduced without permission.