以下代码打印wx.ACCEL_NORMAL好
import wx.gizmos
# import wx # uncommenting this the warning is eliminated
print wx.ACCEL_NORMAL # Pycharm warns: "Cannot find reference 'ACCEL_NORMAL'
# in imported module wx" but finds it alright when i run it
两个问题:
编辑:
可能是一个wx,如下所示没有警告:
import os.path
print os.name
但是Q1仍然存在
EDIT2:
将导入更改为
import wx.gizmos as gizmos
我得到了预期的结果:
Traceback (most recent call last):
File "/home/utumno/.PyCharm40/config/scratches/scratch", line 5, in <module>
print wx.ACCEL_NORMAL # Pycharm warns: "Cannot find reference 'ACCEL_NORMAL'
NameError: name 'wx' is not defined
答案 0 :(得分:4)
行import wx.gizmos
首先导入wx
包(如果之前未加载,则将其存储在sys.modules['wx']
中,然后还导入wx.gizmos
模块并使其成为sys.modules['wx']
对象。然后Python将wx
绑定到sys.modules['wx']
。
因此,您最终会在代码中使用全局名称wx
,您可以通过该名称引用wx.gizmos
。
wx.gizmos
使wx
可用。 wx.gizmos
失败并且os.path
的工作原因可能是由于多种因素造成的;也许PyCharm开发人员将os
处理硬编码到分析器中(因为导入os.path
非常常见),或wx
命名空间实现为C扩展,这意味着静态分析必须依赖于预先计算可用名称的地图,这里可能没有加载wx
地图。