我使用Python开发软件,使用PyQt5开发GUI。IDE是VSCode。
最近Python版本由旧版本Python3.7升级到Python3.11,然后出现了若干问题需要修复,这里记录我自始至终的修复过程。
我把遇到的一些问题罗列出来,如下:
- np has no attribute int。新版Python强调使用明确的类型,需要将np.int指明为具体的类型,比如np.int64或者np.uint8;
- 若干函数的形参类型和传入的变量类型不一致,例如形参是int类型,但传入的是float。这在旧版本Python中是能正常工作的,但是新版Python会出现运行时错误。例如QSize、setWidth()、setColumnWidth()函数等。这也表明了Python在强调类型一致的重要性。
- 从numpy数组图像转换到QPixmap的图,添加到QGraphicsScene显示时会崩溃。原本的代码是先将数组转为PIL的Image,再用fromarray().toQPixmap()转换成QPixmap的,这可能已存在不兼容的情况。通过依赖QImage中转能正常运行。
整个项目的代码量庞大,如何做到滴水不漏呢?如果仅仅依赖记忆和软件测试,显然不能100%保证能修复完,这里我尝试利用了一些类型检查工具,Pylance、Mypy和Pylint。
极力推荐的是Pylance,配置方便,提示明确,没有太多的“无关紧要”的提示(相比于另外两个工具而言)。Mypy和Pylint配置起来很麻烦,参数名和参数值都没有提示,需要进入官网,一边阅读手册一边进行配置。Pylance则不同,在VSCode中配置时会自动列出所有可配置项,并且每一项都有文字说明。
这可能也是为什么VSCode会把Pylance作为默认语言服务器的原因。
***
使用Pylance检查整个项目的类型错误,需要将诊断模式设置为 workspace,否则仅对当前打开的文件生效。