2016-04-21 15 views
1

Wie kann ich PyCharm Vervollständigungen für eine zurückgegebene Variable verstehen lassen?PyCharm: Typ der zurückgegebenen Variablen angeben?

Per https://www.jetbrains.com/help/pycharm/5.0/type-hinting-in-pycharm.html

ich behaupten, den Typ einer Variablen, aber keine Fertigstellungen bekommen.

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 

enter image description here

Python 2,7, PyCharm Community Edition 2016.1.2

Antwort

1

Dies zu Cannot find reference 'xxx' in __init__.py - Python/Pycharm und die Tatsache zusammenhängt, dass es keine __all__ innerhalb des __init__.py inside the boto.kinesis package definiert ist.

die KinesisConnection importieren direkt aus boto.kinesis.layer1 machte es für mich arbeiten:

import boto.kinesis 
from boto.kinesis.layer1 import KinesisConnection 

x = boto.kinesis.connect_to_region("us-west-2") 
assert isinstance(x, KinesisConnection) 

enter image description here


Sie können auch einen type Hinweis in den Kommentaren importieren und hinzufügen:

import boto.kinesis 
from boto.kinesis.layer1 import KinesisConnection 

x = boto.kinesis.connect_to_region("us-west-2") # type: KinesisConnection 

enter image description here

+0

Beide von denen gearbeitet, danke. Ich schreibe eine Verbesserungsanfrage mit JetBrains, um den zusätzlichen Import zu vermeiden. –

+0

@MarkHarrison Ich vermute, dass sie sich auf die Art und Weise beziehen würden, wie das 'boto.kinesis'-Paket strukturiert/definiert ist, da' layer1' nicht explizit in '__all__' aufgelistet ist, ähnlich wie http://stackoverflow.com/questions/23248017/ kann nicht-finden-Referenz-xxx-in-init-py-python-pycharm. – alecxe

1

(PyCharm Entwickler Antworten, über JetBrains Unterstützung)

Wie @alexce bemerken das zugrunde liegende Problem besteht darin, dass PyCharm nicht boto.kinesis.layer1 Bezug zu lösen und damit Symbol boto.kinesis.layer1.KinesisConnection kann nicht zu lösen.

Normalerweise können Sie auf diese Weise nicht auf Untermodule eines Pakets verweisen (ohne sie explizit zu importieren). Wenn PyCharm es erlaubte, würde es Tonnen von falsch negativen Fehlern geben, wenn man vergisst, notwendige Importanweisungen hinzuzufügen. Aber weil solche Situationen ziemlich häufig sind, schauen wir durch boto/kinesis/__init__.py versuchen, einige Hinweise zu finden, dass sys.modules['boto.kinesis'] möglicherweise bereits das Attribut layer1 enthalten.

Alles, was der folgenden tun würde:

from boto.kinesis import layer1 
from . import layer1 
from boto.kinesis.layer1 import KinesisConnection 
import boto.kinesis.layer1 
'layer1' in __all__ 

In der Tat __init__.py in der Tat enthält die dritte dieser Import-Anweisungen, aber in einer Funktion:

def regions(): 
    ... 
    from boto.kinesis.layer1 import KinesisConnection 
    ... 

Da wir nicht garantieren können, statisch, dass Diese Funktion wird zur Laufzeit aufgerufen, wir haben nichts anderes zu tun, als vor der ungelösten Referenz im Editor zu warnen.

Verwandte Themen