2016-08-15 4 views
1

私は、RESTfull APIからPythonでデータを収集して印刷する非常に単純なサービスをしようとしています。 これは私が持っているコードです。ここでこの場合、Pycharmが辞書の方法を表示しないのはなぜですか?

import requests 
import json 

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

は私の問題です:私はDATA2の種類を印刷するとき、それは私がdata2.を行うときに(ドットに注意してください)私のIDEは私のシリーズを与える必要があり、それは辞書だと言われます私が選択するlen()、cmp()、str()のようなメソッドしかし、何も表示されません。 同じことがAtomを使って私に起こります。 明らかに、私がdata2.len()と書くと、エラーであるとは言わないので、メソッドを認識します。しかし、それは彼らを示唆するものではありません。

どうすれば解決できますか?どうもありがとうございます。

+2

pycharmは、data2は辞書で認識していません。印刷すると、実行時に型が評価されます。 IDEには静的型が必要です。 'data2 = dict()'または 'variable = []'と入力すると、補完が完了します。 – njzk2

+0

@ njzk2、ありがとうございます。私はあなたが提案したものを試しました。 'data2 = []'を実行してから 'data2 = response.json()'の前に 'data2(dot)'を実行すると、すべてのメソッドが表示されます。しかし、私がそれをやると、うまくいかない。 –

+0

ええ、この時点で参照が変更され、pycharm *が型を知ることができないためです。ここでは何もできません。 – njzk2

答えて

0

PyCharmのできないことは、単独のコードから変数の型を推論できないことを示しています。多くの場合、バグコードを意味するコードでは、その変数のデータをすべて適切に処理する準備ができていない可能性があることがよくあります。

特定の実行はそれがは常にはなるだろうという意味ではありませんあなたのコードはdictとしてタイプを印刷しているという事実dict(そうPyCharmが型を推論することができただろう)。

どのような状況でも、変数のデータを処理するためのコードを作成することができます。これにより、型の推定が可能になり、PyCharmによってデータが正しく入力されます。

は例えば、次のようにコードを書くことができ:要求は戻り値の型を宣言していないため、

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

または、

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

コメントに記載されているように、requestsは戻り値の型を宣言していないため、PyCharmは型を認識しません。しかし、それは(PEP-484を参照)、ここでタイプのコメントを使用することが可能です:あなたが言及した方法を表示する

response = requests.get("url") 
data2 = response.json() # type: dict 
print(type(data2)) 
関連する問題