2016-08-15 5 views
1

Ich versuche, einen sehr einfachen Dienst zu tun, um Daten von einer RESTfull-API in Python zu sammeln und zu drucken. Dies ist der Code, den ich habe:Warum zeigt Pycharm in diesem Fall keine Wörterbuchmethoden?

import requests 
import json 

response = requests.get("url") 
data2 = response.json() 
print type(data2) 

Hier mein Problem ist: Wenn ich Daten2 Art zu drucken, es sagt mir, es ist ein Wörterbuch ist, also wenn ich data2. tun (man beachte den Punkt) meine IDE sollte mir eine Serie geben von Methoden wie len(), cmp(), str() für mich zur Auswahl. Aber nichts zeigt sich. Das gleiche passiert mir mit Atom. Um klar zu sein, wenn ich schreibe data2.len(), heißt es nicht, es ist ein Fehler, so dass es die Methoden erkennt. Aber es zeigt sie nicht als Vorschlag.

Wie soll ich das lösen? Ich danke dir sehr.

+2

PyCharm nicht weiß, Daten2 ein dict ist, weil Anfragen keinen Rückgabetyp nicht erklären. Wenn Sie es drucken, wird der Typ zur Laufzeit ausgewertet. Die IDE benötigt statische Typen. Wenn Sie 'data2 = dict()' oder 'variable = []' eingeben, haben Sie Ihre Vervollständigung. – njzk2

+0

@ njzk2, Vielen Dank für Ihre Antwort. Ich habe versucht, was du vorgeschlagen hast. Wenn ich 'data2 = []' und dann 'data2 (dot)' vor 'data2 = response.json()' versuche, werden alle Methoden angezeigt. Wenn ich es danach mache, funktioniert es nicht. –

+0

Ja, denn an diesem Punkt hat sich die Referenz geändert, und pycharm * kann den Typ nicht kennen. Hier kannst du nichts machen. – njzk2

Antwort

0

PyCharm Unfähigkeit, die Methoden anzuzeigen, die Sie zeigen, Unfähigkeit erwähnen allein den Variablentyp aus dem Code zu schließen. Dies deutet oft darauf hin, dass der Code möglicherweise nicht in allen Fällen für die korrekte Handhabung der Daten dieser Variablen vorbereitet ist (in vielen Fällen bedeutet dies fehlerhaften Code).

Die Tatsache, dass der Code den Typ als dict in druckt, die bestimmte Ausführung bedeutet nicht, es wird immer sein ein dict (sonst PyCharm der Lage gewesen wäre, den Typ zu schließen).

Damit der Code besser auf die Daten der Variablen in jeder Situation vorbereitet ist, wird der Typ erstellbar, wodurch PyCharm auch die Daten korrekt eingibt.

Zum Beispiel könnten Sie Ihren Code wie folgt schreiben:

response = requests.get("url") 
data2 = response.json() 
assert isinstance(data2, dict) 
print type(data2) # here data2's methods would be listed 

oder

response = requests.get("url") 
data2 = response.json() 
if isinstance(data2, dict): 
    print type(data2) # here data2's methods would be listed 
2

Wie in Kommentaren erwähnt, kennt PyCharm den Typ nicht, weil requests den Rückgabetyp nicht deklariert. Aber es ist möglich, hier Typ Kommentare zu verwenden (siehe PEP-484):

response = requests.get("url") 
data2 = response.json() # type: dict 
print(type(data2)) 
Verwandte Themen