如何让PyCharm了解返回变量的完成情况?
根据https://www.jetbrains.com/help/pycharm/5.0/type-hinting-in-pycharm.html
我断言变量的类型,但没有得到任何完成。
import boto.kinesis
x = boto.kinesis.connect_to_region("us-west-2")
assert isinstance(x, boto.kinesis.layer1.KinesisConnection)
foo = x. <--- not getting completions here
Python 2,7,PyCharm Community Edition 2016.1.2
答案 0 :(得分:1)
这与Cannot find reference 'xxx' in __init__.py - Python / Pycharm以及__init__.py
inside the boto.kinesis
package内未定义__all__
的事实有关。
直接从KinesisConnection
导入boto.kinesis.layer1
,这对我有用:
import boto.kinesis
from boto.kinesis.layer1 import KinesisConnection
x = boto.kinesis.connect_to_region("us-west-2")
assert isinstance(x, KinesisConnection)
您也可以导入它并在评论中添加type
提示:
import boto.kinesis
from boto.kinesis.layer1 import KinesisConnection
x = boto.kinesis.connect_to_region("us-west-2") # type: KinesisConnection
答案 1 :(得分:1)
(PyCharm Developer通过JetBrains支持回复)
正如@alexce所指出的,潜在的问题是PyCharm无法解析<%= week.send field.to_sym %>
引用,因此无法解析boto.kinesis.layer1
的符号。
通常,您不能以这种方式引用包的子模块(不显式导入它们)。如果PyCharm允许它,当忘记添加必要的import语句时会有大量的误报错误。但由于这种情况非常常见,我们会通过boto.kinesis.layer1.KinesisConnection
查看boto/kinesis/__init__.py
可能已包含属性sys.modules['boto.kinesis']
的一些迹象。
以下任何内容都可以:
layer1
实际上from boto.kinesis import layer1
from . import layer1
from boto.kinesis.layer1 import KinesisConnection
import boto.kinesis.layer1
'layer1' in __all__
确实包含这些import语句中的第三个,但是在函数内部:
__init__.py
由于我们不能静态地保证在运行时调用此函数,除了警告编辑器中未解析的引用之外,我们除此之外别无其他。