发现问题

PyCharm在使用openpyxl第三方模块时,通过from openpyxl import load_workbook 导入具体函数,wb变量类型是openpyxl.workbook.workbook.Workbook,具体代码如下:

from openpyxl import load_workbook

wb = load_workbook('load_work.xlsx')
sheet = wb.worksheets[0]
print(wb, type(wb))

# --输出--
# <openpyxl.workbook.workbook.Workbook object at 0x10b0d5d50> <class 'openpyxl.workbook.workbook.Workbook'>

wb.worksheets[0]按道理可以通过代码提示输入,但是,事与愿违的是按下“wb.”时,想要的方法提示统统没有,就是下图这个样子:

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_代码提示


理想应该是这样的:

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_快捷键_02

解决方法

补充说明(2022.11.24更新)

在使用了一段时间(2022.11.05更新)的方法后,发现自从忽视了pyi格式的文件后,一些简单的代码提示就不再提示了,鱼和熊掌不可兼得的感想,最后妥协了,使用 类型注解 的方法。

一步到位解决代码提示问题(2022.11.05更新)

Pycharm一步到位解决第三方库导入无代码提示问题

Mac:Preferences(快捷键cmd+,)-> Editor -> File Types -> Ignored and Folders -> + -> *.pyi

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_python_03

找了一些博客,目前有三种解决方法(均测试过可行)如下:
写在最前面的加粗,三种方法的大前提就是导入类或者类所在的模块
解释说明:from openpyxl import Workbook 就是这条导入语句,将这个类Workbook导入进来,导入方法不是只有这个,也可以导入from openpyxl.workbook import workbook或者 from openpyxl import workbook。言而总之,就是把类Workbook通过导入给到文件。

1. 类型注解

(网上找来的名字)格式 # type: [类型路径]

可以是这样(注意每张图的区别)

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_快捷键_02


或者这样

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_pycharm_05

那么此处有点疑惑,类Workbook只定义了一个地方,🐦有多个使用方法。实际上,抓源头都是openpyxl.workbook.workbook.Workbook,原因是写“轮子”(也就是包“openpyxl”)的大佬在openpyxl/init.py文件中都写好了,看下图,快捷键cmd+左键 划线的英文

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_解决方法_06


跳转过来,就可以看到原因了。

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_快捷键_07

2. 指定类型

(网上找来的名字)格式 ‘’’ :type: [类型路径]‘’’

个人浅觉,与第一种方法差不多,费点键盘。

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_pycharm_08

3. isinstance指定

这个函数是用来判断2个参数是否是同类型的。光写这个自然不够,看图秒懂:

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_python_09

问题原因

开始找原因,以下都是个人觉得,

IDE(PyCharm)不知道wb这个变量是什么类型,那就没有提示了,所以需要指定下类型去告知IDE这个是Workbook类型数据。
但是呢,鄙人不光使用PyCharm编程,还有VScode(两款软件各有特点,这里只说明现象),两款软件均使用Python解释器python 3.11(最新版),同样的代码在VScode不需要添加指定类型就有提示,所以怀疑是个人设置IDE仍存在问题,目前还没有查到具体的设置方法,查到后再做补充(了解PyCharm设置代码提示的大佬可以留言下,感谢大佬)。以下是VScode的使用截图:

pycharm里面有python但是cmd没有 pycharm为啥没有提示了_解决方法_10